我定义了一个字符数组:
char d[6];
如果我在以下方面有错误,请纠正我:
此时没有为变量分配内存d
。现在我要初始化它:
d="aaaaa";
在这种初始化之后,就不需要释放内存了;它会自动完成。
我怎么知道是否char[]
已初始化?我正在寻找类似的模式
if (filled(d)){..}
另外,如何用一种字符填充 char[] ?
此时没有为变量 d 分配内存。
不正确。这个:
char d[6];
是一个未初始化的 6 char
s 数组,并且已为其分配了堆栈上的内存。堆栈变量不需要显式free()
d,无论它们是否已初始化。堆栈变量使用的内存将在超出范围时被释放。只有通过malloc()
, realloc()
or获得的指针才calloc()
应该传递给free()
.
初始化:
char d[6] = "aaaaa"; /* 5 'a's and one null terminator. */
或者:
char d[] = "aaaaa"; /* The size of the array is inferred. */
而且,正如mathematician1975已经指出的那样,数组赋值是非法的:
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. */
}
或使用memcmp()
if not null 终止:
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"
以这种方式初始化它。这是在堆栈上创建的局部变量,因此就内存问题而言,您需要担心的不是超出数组边界的写入/读取。
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
首先,每当您声明char d[6]
已经分配了 6 个字节的内存时。
其次,除非你做 malloc,否则不需要释放你的内存
第三,如果你想用一种字符初始化它,那么这样做
char d[6] = "aaaaa";
int d[6];
使用此声明将 6 个字节分配到堆栈上。它将被自动释放。