C清除变量

问题描述 投票:3回答:6
char x [1000];
x = 'hello';
.....
 clear contents of x???

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

c variables clear
6个回答
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之类的函数,它们不接受输出缓冲区的大小作为参数。这些确实不安全,并且会导致令人讨厌的错误和安全漏洞。如果您知道什么都不会出错,甚至不要使用它们,只需养成使用安全功能的习惯。


5
投票

free()的使用将是错误的,因为x在堆栈中。

您清楚是什么意思?将其设置为默认值?可以使用memset吗? (我正在照原样复制您的代码)

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

char x[1000];

x= 'hello';

CLEAR(x)

如果没有,您总是可以使用for循环。


2
投票
x='hello';

可能未如您所愿,因为'表示字符常量(或在这种情况下为多字符常量)not字符串。

实际上,gcc不会接受上面的代码,抱怨'hello'太长(在具有4个字节int s的计算机上),并且x = 'hell'是不兼容的赋值,因为char[]int不同。

也不应该

char x[1000];
x="hello";

工作,因为您不能那样分配数组。


0
投票

如果用“清除”表示“清除阵列中的所有位”,memset(x, '\0', 1000);如何?


0
投票

要清除它,您只需将其全部重置为零。

char x[1000];
//...
memcpy(x, 0, sizeof (x));

-1
投票

x[0]='\0';是否可用于二维数组?因为您只删除x[0][0...]上的内容,而不是x[1][0]x[2][0]等上的内容。

© www.soinside.com 2019 - 2024. All rights reserved.