簡體   English   中英

strcat中的C錯誤分割

[英]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");

代替。

outnameConst指針,所以一旦你輸入了一些東西,你就無法修改它。

但是,如果要復制其中的內容,請創建一個大小等於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM