我想将C中的字符串初始化为空字符串。 我试过了:
string[0] = "";
但它写了
"warning: assignment makes integer from pointer without a cast"
那我该怎么办呢?
答案 0 :(得分:23)
您希望将字符串的第一个字符设置为零,如下所示:
char myString[10];
myString[0] = '\0';
(或myString[0] = 0;
)
或者,实际上,在初始化时,您可以:
char myString[10] = "";
但是,这不是将字符串设置为零长度的一般方法。
答案 1 :(得分:19)
除了Will Dean的版本之外,以下内容对于整个缓冲区初始化也很常见:
char s[10] = {'\0'};
或
char s[10];
memset(s, '\0', sizeof(s));
或
char s[10];
strncpy(s, "", sizeof(s));
答案 2 :(得分:9)
假设您的数组'string'已经存在,请尝试
string[0] = '\0';
\0
是显式NUL终止符,用于标记字符串的结尾。
答案 3 :(得分:3)
仅在声明期间允许将字符串文字分配给char数组:
char string[] = "";
这将字符串声明为大小为1的char数组,并使用\0
初始化它。
试试这个:
char str1[] = "";
char str2[5] = "";
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
答案 4 :(得分:3)
calloc
分配请求的内存并返回指向它的指针。它还将分配的内存设置为零。
如果您计划始终将string
用作空字符串:
char *string = NULL;
string = (char*)calloc(1, sizeof(char));
如果您打算稍后在string
存储一些价值:
char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));
答案 5 :(得分:2)
string[0] = "";
"warning: assignment makes integer from pointer without a cast
好的,让我们深入了解表达式......
0
一个int:表示字符数(假设string
是(或衰为)char *)从对象的开头前进string
string[0]
:char
对象位于对象的开头string
""
:string literal:类型为char[1]
=
:赋值运算符:尝试将类型char[1]
的值分配给类型为char
的对象。 char[1]
(已衰减到char*
)和char
不兼容,但编译器信任您(程序员)并通过转换类型char*
继续进行分配(char[1]
朽烂)到int
---你得到警告作为奖励。 你有一个非常好的编译器: - )
答案 6 :(得分:1)
要实现此目的,您可以使用:
strcpy(string, "");
答案 7 :(得分:0)
我认为Amarghosh的回答是正确的。如果要初始化空字符串(不知道大小),最好的方法是:
//this will create an empty string without no memory allocation.
char str[]="";// it is look like {0}
但是如果你想初始化一个固定内存分配的字符串,你可以这样做:
// this is better if you know your string size.
char str[5]=""; // it is look like {0, 0, 0, 0, 0}
答案 8 :(得分:0)
有点晚了,但我认为你的问题可能是你创建了一个零长度数组,而不是一个长度为1的数组。
字符串是一系列字符,后跟字符串终止符(""
)。空字符串(string[1] = ""
)不包含任何字符,后跟单个字符串终止符 - 即总共一个字符。
所以我会尝试以下方法:
strlen
请注意,此行为不是由{{1}}模拟的,它不会将终结符计入字符串长度的一部分。