c - 是什么导致字符串连接中的段错误?

标签 c string string-literals strcat

我正在做一个 C 语言练习,以复习这个主题。我正在尝试使用我的程序来操作头文件;但程序返回“段错误”。我已将问题隔离到以下代码段。谁能帮我看看它到底出了什么问题?

    header=strtok(st,"\"");
    header=strtok(NULL,"\"");
    f=fopen(header,"r");
    if(f)
    {
            while((ch=fgetc(f))!=EOF)
            fputc(ch,f2);

            fclose(f);
    }
    else
    {
            header2=(char *)malloc(strlen("/usr/include")+strlen(header));
            header2=strcat("/usr/include/",header);
            f=fopen(header2,"r");

            printf("%s\n",header2);

            while((ch=fgetc(f))!=EOF)
            fputc(ch,f2);

            fclose(f);
   }

我注意到只有当我尝试访问/usr/include/位置时才会出现此问题。某种身份验证问题?如果是这样,如何克服呢?提前致谢。 :)

最佳答案

您不能将字符串文字用作 strcat 的目标——字符串文字是不可修改的,并且它没有足够的空间来容纳连接的字符串。将变量与前缀组合的更好方法是使用 sprintf

header2 = malloc(strlen("/usr/include/")+strlen(header)+1);
sprintf(header2, "/usr/include/%s", header);

请注意,您需要在调用 malloc() 时将组合长度加 1,以便为尾随的空字节留出空间。

您还可以使用 strcpy 后跟 strcat:

strcpy(header2, "/usr/include/");
strcat(header2, header);

关于c - 是什么导致字符串连接中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085720/

相关文章:

c - 带有部分窗口标题的 FindWindow (Windows, C)

c - C 程序中调用图生成的静态分析

C# SQL 搜索结果到字符串/文本框

c# - 在 C# 中使用字符串调用方法时出现 "Object does not match target type"

postgresql - Postgres 字符串前的 "E"是什么?

string - 使用ANTLR解析字符串文字时,出现NoViableAltException

objective-c - 快速找到数字的下一个倍数的方法

使用 Axis2/C 连接到需要用户名、密码和 .cer 文件的 Web 服务

c - 填空: Reverse the original string without asking other than what is given?

javascript - 在javascript中引用正则表达式文字?为什么不?