我有"包括"我能找到的任何东西,我都尝试过各种方式来声明字符串,取消引用字符串,打印字符串以及我仍然遇到分段错误。我使用的是ubuntu,我遇到了分段错误,我不知道为什么。我一直在从字符串声明,printf等中读取每个版本的错误,但我发现没有任何效果。
它甚至没有printf(" test");
想法?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char **argv)
{
printf("test");
char *string = "hey dude what's up";
printf("test");
char **strings;
char *tempString;
printf("test");
}
答案 0 :(得分:0)
在发布的代码中,在更正所有编译器警告后,将保留以下内容。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main( void)
{
printf("test");
printf("test");
printf("test");
return(0);
}
哪个不会出错;
记住操作系统缓冲了stdout,在程序退出或缓冲区(非常大)溢出之前不会打印任何内容。
但是,要立即打印每个'test'字符串
1) follow each printf() with fflush(stdout)
or
2) modify 'test' to 'test\n'
or
3) follow each printf() with an input statement, like fgets or getchar or ...
给出原始代码:
int main(int argc, char **argv)
{
printf("test");
char *string = "hey dude what's up";
printf("test");
char **strings;
char *tempString;
printf("test");
}
修改文字的任何努力,比如使用strtok()都会导致seg错误事件,因为文字在只读内存中
为了使代码更健壮,char指针'strings'和'tempString'应初始化为NULL。
编程变量只是一个字符串差异'字符串'和'字符串',因为这种做法可能并且将成为维护的噩梦,这是不好的编程习惯。
我还建议不要将变量命名与使用的头文件相同('string'和'strings'和'string.h')注意:还有一个'strings.h'头文件
BTW:原始代码编译时带有警告,没有警告的链接,以及没有seg故障事件的运行。
或当然,在程序退出之前,由于stdout的缓冲,终端没有输出。
我正在运行ubuntu linux 14.04