[英]strcat in C error segmentation
#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);
}
}
我有這個錯誤:分段錯誤。
我該如何解決?
outname
是字符串文字,字符串文字不可修改。 修改字符串文字是未定義的行為。
至少有兩個錯誤:
char tab[2] = {"12"};
你最好使用tab[3]
甚至更好的tab[]
- 你需要一個額外的字符來終止NUL字符。
也,
char *outname = "etc...";
在可執行文件的數據段中創建一個常量字符串 - 它不能被覆蓋,因為strcat
使用它的第一個參數來連接兩個字符串。 因此,當strcat()
嘗試這樣做時,會出現段錯誤。 采用
char outname[50]; // something big enough
strcpy(outname, "/home/dir");
代替。
outname是Const指針,所以一旦你輸入了一些東西,你就無法修改它。
但是,如果要復制其中的內容,請創建一個大小等於tab []數組的char數組,因為這里要復制的字符串大小是已知的。 大多數情況下,當您從用戶那里獲取輸入並且您不知道輸入將持續多長時間時,會使用像OUTNAME這樣的字符指針。
在你的代碼中,
char *outname = "/home/dir/";
outname是一個字符串文字,因此當與strcat一起使用時,它沒有足夠的長度來保存連接的字符串。這會導致分段錯誤。
如果您將其聲明如下,則情況相同,
char outname[] = "/home/dir/";
解決方案是將outname的大小聲明為足以容納連接字符串。
char outname[80] = "/home/dir/";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.