char x [1000];
x = 'hello';
.....
clear contents of x???
我会用什么来清除x?我无法重新初始化它,使用strcpy(x,'/ 0')或free()。
答案 0 :(得分:7)
您无法将任何内容分配给变量x
所在的数组。因此,以x =
开头的任何内容都是错误的。其次'hello'
不是字符串,它是一个多字符文字,类型为int
,所以这也没有意义。字符串文字由"
括起,而字符(或多字符)文字由'
括起。
因此,如果您想使用字符串“hello”填充缓冲区x
,请使用strncpy
或更好strlcpy
(如果有):
strncpy( x, "hello", sizeof( x ) );
strlcpy( x, "hello", sizeof( x ) );
strlcpy
函数更好,因为它总是以nul
字符终止字符串。
如果你想清除它,你可以做其他答案建议。我建议使用strncpy
或strlcpy
使用空字符串作为@codaddict建议。这段代码最明显地说“嘿,我想要清除那个字符串”。如果你想从内存中删除字符串的全部内容(例如,如果它包含密码或类似内容),请使用memset
作为@Ken和@Tom建议。
另请注意,从未使用不接受输出缓冲区大小的strcpy
或strcat
等函数作为参数。这些确实不安全,并导致令人讨厌的错误和安全漏洞。如果您知道什么都不会出错,请不要使用它们,只要养成使用安全功能的习惯。
答案 1 :(得分:5)
free()
的使用是错误的,因为x
在堆栈中。
你是什么意思清楚?将其设置为默认值?你能用memset
吗? (我正在复制您的代码)
#define CLEAR(x) memset(x,'\0',1000)
char x[1000];
x= 'hello';
CLEAR(x)
如果没有,您可以随时使用for循环。
答案 2 :(得分:2)
x='hello';
可能没有按照您的期望进行,因为'
表示字符常量(或者在这种情况下是多字符常量)不是字符串。
事实上,gcc不会接受上面的代码,抱怨'hello'
很长(那是在4字节int
s的机器上),x = 'hell'
是一个不兼容的分配,因为char[]
与int
不同。
也不应该
char x[1000];
x="hello";
工作,因为你无法以这种方式分配数组。
答案 3 :(得分:0)
如果“清除”是指“清除阵列中的所有位”,那么memset(x, '\0', 1000);
怎么样?