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