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

我想在C中初始化字符串以清空字符串。 我试过了:

string[0] = ""; 

但它写道

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

那我该怎么办呢?

假设您的数组’string’已经存在,请尝试

 string[0] = '\0'; 

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

您想将字符串的第一个字符设置为零,如下所示:

 char myString[10]; myString[0] = '\0'; 

(或myString[0] = 0;

或者,实际上,在初始化时,您可以:

 char myString[10] = ""; 

但是,一旦定义了字符串,这不是将字符串设置为零长度的一般方法。

除了Will Dean的版本,以下是整个缓冲区初始化的常见内容:

 char s[10] = {'\0'}; 

要么

 char s[10]; memset(s, '\0', sizeof(s)); 

要么

 char s[10]; strncpy(s, "", sizeof(s)); 

仅在声明期间允许将字符串文字分配给char数组:

 char string[] = ""; 

这将字符串声明为大小为1的char数组,并使用\0初始化它。

试试这个:

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

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一个int:表示字符数(假设string是(或衰减成)一个char *)从对象string的开头前进

string[0] :位于对象string开头的char对象

"" :string literal: char[1]类型的对象

= :赋值运算符:尝试将char[1]类型的值赋给char[1]类型的对象。 char[1] (decayed to char* )和char不是赋值兼容的,但编译器信任你(程序员)并继续执行赋值,无论如何通过将char*类型( char[1]衰减到)转换为int —你得到警告作为奖金。 你有一个非常好的编译器 🙂

我认为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} 

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

字符串是一系列字符后跟一个字符串终止符( '\0' )。 空字符串( "" )由没有字符后跟单个字符串终结符字符组成 – 即总共一个字符。

所以我会尝试以下方法:

string[1] = ""

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