我正在做一个 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/