#include <stdio.h>
#include <string.h>
int main() {
char tab[2]={"12"};
FILE *outfile;
char *outname = "/home/dir/";
printf("%s", strcat(outname,tab));
outfile = fopen(strcat(outname,btab), "w");
if (!outfile) {
printf("There was a problem opening %s for writing\n", outname);
}
}
我有这个错误:分段错误。
我该如何解决?
答案 0 :(得分:1)
outname
是字符串文字,字符串文字不可修改。修改字符串文字是未定义的行为。
答案 1 :(得分:1)
至少有两个错误:
char tab[2] = {"12"};
您最好使用tab[3]
甚至更好tab[]
- 您需要一个额外的字符来终止NUL字符。
此外,
char *outname = "etc...";
在可执行文件的数据段中创建一个常量字符串 - 它不能被覆盖,因为strcat
正在使用其第一个参数来连接两个字符串。因此,当strcat()
尝试这样做时,会出现段错误。使用
char outname[50]; // something big enough
strcpy(outname, "/home/dir");
代替。
答案 2 :(得分:0)
outname 是 Const指针,所以一旦你输入了一些内容,就无法修改。
但是如果要复制其中的内容,请创建一个大小等于tab []数组的char数组,因为这里要复制的字符串大小是已知的。大多数情况下,当您从用户那里获取输入时,会使用像OUTNAME这样的字符串指针而您不知道输入的时间长度。
答案 3 :(得分:0)
在您的代码中,
char *outname = "/home/dir/";
outname是一个字符串文字,因此当与strcat一起使用时,它没有足够的长度来保存连接的字符串。这会导致分段错误。
如果您将其声明如下,则情况相同,
char outname[] = "/home/dir/";
解决方法是将outname的大小声明为足以保存连接字符串。
char outname[80] = "/home/dir/";