在C语言中将一个字符串初始化为空字符串

32

我想在C语言中初始化一个空字符串。

我尝试了:

string[0] = ""; 

但是它写了

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

那我应该怎么做呢?


3
声明一个0字符的字符串有什么意义? - cdhowie
你的 string 是什么类型?它是一个字符指针还是一个字符数组? - nos
@cdhowie:例如,它可以是一个有用的哨兵值。 - Oliver Charlesworth
哦,我误解了。 "string" 是之前定义的一个变量。 我以为这是某种奇怪的变量声明。 - cdhowie
有效问题 @leppie 什么是字符串。 - user1011455
9个回答

41

除了Will Dean的版本外,以下内容通常用于整个缓冲区的初始化:

char s[10] = {'\0'};
或者
char s[10];
memset(s, '\0', sizeof(s));
或者
char s[10];
strncpy(s, "", sizeof(s));

1
非常感谢您8年前的回答。在整个缓冲区初始化方面找不到太多信息。 - Parth Patel

33
你想将字符串的第一个字符设为零,像这样:

char myString[10];
myString[0] = '\0';
(或者myString[0] = 0;)
实际上,在初始化时,您可以这样做:
char myString[10] = "";

但这并不是一种通用的方法,可以在定义字符串后将其设置为零长度。


3
char myString[1] = ""; 这样写没问题吗?你需要给空字符串留出空间以放置字符串结束符。 - JeremyP
1
更正:你可以这样写 char myString[10] = ""; - ruslik
@JeremyP:""代表"\0",所以我认为char myString[1]就足够了。 - Nan Xiao
@NanXiao 当时我的注释写成了 char myString[0] = "";。但现在已经被修正了。 - JeremyP

21

假设你已经有一个叫做 'string' 的数组,尝试使用以下代码:

string[0] = '\0';

\0是显式的NUL终止符,用于标记字符串的结尾。


@badgerr:你能否请修改你的答案,使用 '\0' 代替? - pevik

5

只有在声明期间才允许将字符串文字分配给字符数组:

char string[] = "";

这将把字符串声明为一个大小为1的字符数组,并用\0初始化。

也可以尝试这个:

char str1[] = ""; 
char str2[5] = ""; 
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5

4
为了实现这个目标,您可以使用以下方法:
strcpy(string, "");

4

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));

3
string[0] = "";
警告:赋值会使指针转换为整数

好的,让我们深入了解这个表达式...

0是一个整型数:表示从对象string的开头开始要前进多少个字符(假设string是一个char*或者已经被降级为char*

string[0]:对象string开头处的char对象

"":字符串字面量:一种类型为char[1]的对象

=:赋值运算符:试图将char[1]类型的值赋给一个char类型的对象。char[1](降级为char*)和char之间不能互相赋值,但编译器信任你(程序员),并继续进行赋值操作,通过将char[1](降级为char*)的类型强制转换为int --- 最终您得到了一个额外的警告提示。你使用的是真心不错的编译器 :-)


如果有解决方案的话,它会获得更多的赞;不过这是一个很好地解释了正在发生的事情。 - wizzwizz4
我同意@wizzwizz4的观点,但我喜欢我的答案。谢谢! - pmg

0

有点晚了,但我认为你的问题可能是你创建了一个长度为零的数组,而不是长度为1的数组。

字符串是一系列字符,后面跟着一个字符串终止符('\0')。空字符串("")由没有字符组成,后面跟着一个单个的字符串终止符字符 - 总共只有一个字符。

所以我建议尝试以下操作:

string[1] = ""

请注意,这种行为不是由strlen模拟的,它不会将终止符计算为字符串长度的一部分。


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} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接