代码如下:
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
int main(void) {
// your code goes here
char *temp = "GET / HTTP/1,1";
char *url = strpbrk(temp," ");
printf("%s\n",url);
*url++ = '\0';
char *method = temp;
printf("%s\n",method);
return 0;
}
就这么简单的一段程序,在*url++='\0';上报段错误,我的linux不知道为什么神经又
不产生core文件,这个搞得我都懵逼了,不知道哪个前辈帮我解释下,谢谢了
int main(void) {
// your code goes here
char str[20] = {'G','E','T',' ','/',' ','H','T','T','P','/','1',',','1'};
*str = '\0'; // 不会段错误
char *temp = "GET / HTTP/1,1";
*temp = '\0'; //会段错误
数组保存在栈中,字符串保存在文字常量区,这部分是不可以修改的
*url++ = '\0'; 你这句是什么意思?问题就出在这一句上
我傻逼了url是常量,不能赋值.....
谢谢各位了。。。我一看它报段错误,就没往这方想一直以为是空指针......
段错误(Segmentation Violations/Faults)原因在于非法访问内存。
char *temp = "GET / HTTP/1,1"; //temp指向常量字符串,temp指向内存的内容不可以被修改。
char *url = strpbrk(temp," "); //可以对这块内存进行只读操作,如这行一样查找匹配字符
*url++ = '\0'; //但尝试对这块内存进行写操作,就会报错。
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!