为了使字符串成为空字符串,我写了这个:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char str[15]="fahad uddin";
strlen(str);
puts(str);
for(int i=0;str[i]!='\0';i++)
strcpy(&str[i],"\0") ;
puts(str);
getch();
return 0;
}
在此之前我尝试过:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char str[15]="fahad uddin";
strlen(str);
puts(str);
for(int i=0;str[i]!='\0';i++,strcpy(&str[i],"\0"))
;
puts(str);
getch();
return 0;
}
在第一个示例中,程序运行正常,而在第二个示例中,它打印字符串的第一个字母(在此示例中为F)。这是为什么?
答案 0 :(得分:10)
C字符串以空值终止。只要您只使用假定以空字符结尾的字符串的函数,就可以将第一个字符归零。
str[0] = '\0';
答案 1 :(得分:8)
memset(str,0,strlen(str)); /* should also work */
memset(str,0,sizeof str); /* initialize the entire content */
答案 2 :(得分:5)
for(int i=0;str[i]!='\0';i++,strcpy(&str[i],"\0"));
- i ++在strcpy执行之前递增i - 所以它将在第一次迭代时获取str [1]的地址 - 跳过str [0] - 因此你将获得第一个角色。
请注意,KennyTM的反应是一种更好的方法 - 但我想你正在学习/尝试。
答案 3 :(得分:3)
因为i++,strcpy(&str[i],"\0")
在评估对i++
的调用之前评估strcpy()
,i
使用现在递增的'\0'
值作为目标。实际上,它会跳过字符串的第一个字符。
请注意,有更好的方法可以做你想做的事。
KennyTM提到只使用str[0] = '\0';
将第一个字符设置为memset()
,它不会清除每个字节,但会将字符串标记为长度为零。
还有strcpy()
用于填充任意值的内存块,当然允许0。
此外,调用str[]
的效率远远低于仅仅分配给循环中{{1}}的每个元素。
答案 4 :(得分:-2)
尝试使用此代码:
bzero(string_name, size_of_string);
另外,包括<string.h>
lib文件。我认为这一定有效。