我想在C语言中初始化一个空字符串。
我尝试了:
string[0] = "";
但是它写了
"warning: assignment makes integer from pointer without a cast"
那我应该怎么做呢?
除了Will Dean的版本外,以下内容通常用于整个缓冲区的初始化:
char s[10] = {'\0'};
或者char s[10];
memset(s, '\0', sizeof(s));
或者char s[10];
strncpy(s, "", sizeof(s));
char myString[10];
myString[0] = '\0';
(或者myString[0] = 0;
)char myString[10] = "";
但这并不是一种通用的方法,可以在定义字符串后将其设置为零长度。
char myString[1] = "";
这样写没问题吗?你需要给空字符串留出空间以放置字符串结束符。 - JeremyPchar myString[10] = "";
。 - ruslik""
代表"\0"
,所以我认为char myString[1]
就足够了。 - Nan Xiaochar myString[0] = "";
。但现在已经被修正了。 - JeremyP假设你已经有一个叫做 'string' 的数组,尝试使用以下代码:
string[0] = '\0';
\0
是显式的NUL终止符,用于标记字符串的结尾。
'\0'
代替? - pevik只有在声明期间才允许将字符串文字分配给字符数组:
char string[] = "";
这将把字符串声明为一个大小为1的字符数组,并用\0
初始化。
也可以尝试这个:
char str1[] = "";
char str2[5] = "";
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
strcpy(string, "");
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));
string[0] = "";
警告:赋值会使指针转换为整数
好的,让我们深入了解这个表达式...
0
是一个整型数:表示从对象string
的开头开始要前进多少个字符(假设string
是一个char*
或者已经被降级为char*
)
string[0]
:对象string
开头处的char
对象
""
:字符串字面量:一种类型为char[1]
的对象
=
:赋值运算符:试图将char[1]
类型的值赋给一个char
类型的对象。char[1]
(降级为char*
)和char
之间不能互相赋值,但编译器信任你(程序员),并继续进行赋值操作,通过将char[1]
(降级为char*
)的类型强制转换为int
--- 最终您得到了一个额外的警告提示。你使用的是真心不错的编译器 :-)
有点晚了,但我认为你的问题可能是你创建了一个长度为零的数组,而不是长度为1的数组。
字符串是一系列字符,后面跟着一个字符串终止符('\0'
)。空字符串(""
)由没有字符组成,后面跟着一个单个的字符串终止符字符 - 总共只有一个字符。
所以我建议尝试以下操作:
string[1] = ""
请注意,这种行为不是由strlen
模拟的,它不会将终止符计算为字符串长度的一部分。
我认为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}
string
是什么类型?它是一个字符指针还是一个字符数组? - nos