您不能将任何内容分配给您的变量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字符终止字符串.
如果你想清除它,你可以做其他答案建议.我建议使用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)
Run Code Online (Sandbox Code Playgroud)
如果没有,您可以始终使用for循环.