为了账号安全,请及时绑定邮箱和手机立即绑定

字符串问题,错误原因?

字符串问题,错误原因?

C C++
慕粉18341035298 2017-01-10 17:12:35
#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。有什么不明白的地方可以再问我。

查看完整回答
2 反对 回复 2017-01-11
?
Xyino_Snake

TA贡献31条经验 获得超22个赞

答案很简单。你这样写会导致指针不断递增,直到访问到非法的内存区域为止。要知道末尾的'\0'字符的指针不是NULL!NULL是0指针,也就是nullptr。而句末的指针是句首的指针+句长。你把null改成句末字符的指针值就不会有问题了。
查看完整回答
2 反对 回复 2017-01-11
  • 3 回答
  • 0 关注
  • 1473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信