猿问

字符串问题,错误原因?

#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);
}


慕粉18341035298
浏览 1505回答 3
3回答

zy112

字符串的结束标志是 '\0'  , *s 可以说是指s第一个字符,当它 == '\0', 就是最后一个, 你那样写是指  字符串s的内容就是 NULL。有什么不明白的地方可以再问我。

Xyino_Snake

答案很简单。你这样写会导致指针不断递增,直到访问到非法的内存区域为止。要知道末尾的&#039;\0&#039;字符的指针不是NULL!NULL是0指针,也就是nullptr。而句末的指针是句首的指针+句长。你把null改成句末字符的指针值就不会有问题了。
随时随地看视频慕课网APP
我要回答