char 初始化并处理它
我已经定义了一个char数组:
char d[6];
如果我对以下内容有误,请纠正我:
此时没有为变量d
分配内存。 现在我要初始化它:
d="aaaaa";
在这种初始化之后,就没有必要释放内存; 它将自动完成。
我如何知道char[]
已初始化? 我正在寻找像这样的模式
if (filled(d)){..}
另外,如何用一种角色填充char []?
此时没有为变量d分配内存。
不正确。 这个:
char d[6];
是一个未初始化的6个字符串数组,并且已经为它分配了堆栈内存。 堆栈变量不需要显式free()
d,无论它们是否已初始化。 堆栈变量使用的内存将在超出范围时释放。 只有通过malloc()
, realloc()
或calloc()
获得的指针才能传递给free()
。
初始化:
char d[6] = "aaaaa"; /* 5 'a's and one null terminator. */
要么:
char d[] = "aaaaa"; /* The size of the array is inferred. */
而且,正如数学家 1975年所指出的,数组赋值是非法的:
char d[] = "aaaaa"; /* OK, initialisation. */ d = "aaaaa"; /* !OK, assignment. */
声明后,可以使用strcpy()
, strncpy()
, memcpy()
, snprintf()
等复制到d
,或者将char
赋值给d
各个元素。
怎么知道char []初始化了? 我需要模式如果填充(d){..}
如果数组为空终止,则可以使用strcmp()
if (0 == strcmp("aaaaaa", d)) { /* Filled with 'a's. */ }
或者如果没有null终止,则使用memcmp()
:
if (0 == memcmp("aaaaaa", d, 6)) { /* Filled with 'a's. */ }
如何用一种字符填充char []?
使用memset()
:
memset(d, 'a', sizeof(d)); /* WARNING: no null terminator. */
要么:
char d[] = { 'a', 'a', 'a', 'a', 'a', 'a' }; /* Again, no null. */
如果你这样做,你的代码将无法编译(gcc 4.6.3)
char d[6]; d = "aaaaa";
你需要做的
char d[6] = "aaaaa"
以这种方式初始化它。 这是在堆栈上创建的局部变量,因此在内存问题方面,您需要担心的是不在数组边界之外写入/读取。
首先,每当你声明char d[6]
,已经分配了6个字节的内存。
其次,除非你做malloc,否则不需要释放你的记忆
第三,如果你想用一种角色初始化它,那么就这样做
char d[6] = "aaaaa";
int d[6];
使用此声明将6个字节分配到堆栈。 它将自动释放。
How to know was char[] initialized? I need pattern if filled(d){..}
只需在声明字符数组时执行此操作:
char d[6]; d[0] = 0;
然后你可以像这样检查:
if(strlen(d) == 0) //d is not initialized