在C中初始化一个字符串以清空字符串

时间:2010-11-10 09:03:32

标签: c string

我想将C中的字符串初始化为空字符串。 我试过了:

string[0] = ""; 

但它写了

"warning: assignment makes integer from pointer without a cast"

那我该怎么办呢?

9 个答案:

答案 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}}模拟的,它不会将终结符计入字符串长度的一部分。