C清除变量

Kay*_*Kay 3 c variables clear

char x [1000];
x = 'hello';
.....
 clear contents of x???
Run Code Online (Sandbox Code Playgroud)

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

Sve*_*ven 7

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

因此,如果您想x使用字符串"hello" 填充缓冲区,则使用strncpy或者更好(strlcpy如果可用):

 strncpy( x, "hello", sizeof( x ) );
 strlcpy( x, "hello", sizeof( x ) );
Run Code Online (Sandbox Code Playgroud)

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

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

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


Tom*_*Tom 5

使用free()会出错,因为x在堆栈中.

你是什​​么意思清楚?将其设置为默认值?你能用memset吗?(我正在复制你的代码)

#define CLEAR(x) memset(x,'\0',1000)

char x[1000];

x= 'hello';

CLEAR(x)
Run Code Online (Sandbox Code Playgroud)

如果没有,您可以始终使用for循环.