C,分段错误,通过printf或字符串声明

时间:2015-06-06 21:55:38

标签: c

我有"包括"我能找到的任何东西,我都尝试过各种方式来声明字符串,取消引用字符串,打印字符串以及我仍然遇到分段错误。我使用的是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");

}

1 个答案:

答案 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