char x [1000];
x = 'hello';
.....
clear contents of x???
我将使用什么清除x?我无法重新初始化它,请使用strcpy(x,'/ 0')或free()。
您不能为变量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
之类的函数,它们不接受输出缓冲区的大小作为参数。这些确实不安全,并且会导致令人讨厌的错误和安全漏洞。如果您知道什么都不会出错,甚至不要使用它们,只需养成使用安全功能的习惯。
free()
的使用将是错误的,因为x
在堆栈中。
您清楚是什么意思?将其设置为默认值?可以使用memset
吗? (我正在照原样复制您的代码)
#define CLEAR(x) memset(x,'\0',1000)
char x[1000];
x= 'hello';
CLEAR(x)
如果没有,您总是可以使用for循环。
x='hello';
可能未如您所愿,因为'
表示字符常量(或在这种情况下为多字符常量)not字符串。
实际上,gcc不会接受上面的代码,抱怨'hello'
太长(在具有4个字节int
s的计算机上),并且x = 'hell'
是不兼容的赋值,因为char[]
与int
不同。
也不应该
char x[1000];
x="hello";
工作,因为您不能那样分配数组。
如果用“清除”表示“清除阵列中的所有位”,memset(x, '\0', 1000);
如何?
要清除它,您只需将其全部重置为零。
char x[1000];
//...
memcpy(x, 0, sizeof (x));
x[0]='\0';
是否可用于二维数组?因为您只删除x[0][0...]
上的内容,而不是x[1][0]
,x[2][0]
等上的内容。