C清除变量

时间:2010-09-30 13:52:49

标签: c variables clear

char x [1000];
x = 'hello';
.....
 clear contents of x???

我会用什么来清除x?我无法重新初始化它,使用strcpy(x,'/ 0')或free()。

4 个答案:

答案 0 :(得分:7)

您无法将任何内容分配给变量x所在的数组。因此,以x =开头的任何内容都是错误的。其次'hello'不是字符串,它是一个多字符文字,类型为int,所以这也没有意义。字符串文字由"括起,而字符(或多字符)文字由'括起。

因此,如果您想使用字符串“hello”填充缓冲区x,请使用strncpy或更好strlcpy(如果有):

 strncpy( x, "hello", sizeof( x ) );
 strlcpy( x, "hello", sizeof( x ) );

strlcpy函数更好,因为它总是以nul字符终止字符串。

如果你想清除它,你可以做其他答案建议。我建议使用strncpystrlcpy使用空字符串作为@codaddict建议。这段代码最明显地说“嘿,我想要清除那个字符串”。如果你想从内存中删除字符串的全部内容(例如,如果它包含密码或类似内容),请使用memset作为@Ken和@Tom建议。

另请注意,从未使用不接受输出缓冲区大小的strcpystrcat等函数作为参数。这些确实不安全,并导致令人讨厌的错误和安全漏洞。如果您知道什么都不会出错,请不要使用它们,只要养成使用安全功能的习惯。

答案 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);怎么样?