#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
FILE *p = fopen("a.txt", "w");
if (p == NULL){
cout << "no" << endl;
exit(0);
}
char *s = "woasdfsdf";
while (s!=NULL){ //这里不对,改成*s!='\0'才对,为什么原来的错了?
fputc(*s, p);
s++;
}
fclose(p);
}
3 回答
已采纳
zy112
TA贡献8条经验 获得超10个赞
字符串的结束标志是 '\0' , *s 可以说是指s第一个字符,当它 == '\0', 就是最后一个, 你那样写是指 字符串s的内容就是 NULL。有什么不明白的地方可以再问我。
Xyino_Snake
TA贡献31条经验 获得超22个赞
答案很简单。你这样写会导致指针不断递增,直到访问到非法的内存区域为止。要知道末尾的'\0'字符的指针不是NULL!NULL是0指针,也就是nullptr。而句末的指针是句首的指针+句长。你把null改成句末字符的指针值就不会有问题了。
- 3 回答
- 0 关注
- 1504 浏览
添加回答
举报
0/150
提交
取消