簡體   English   中英

strcpy 上的分段

[英]SEGFAULT on strcpy

我有一個開始的功能

void findErrors(int lineIndex){
  char *line;
  strcpy(line, lines[lineIndex]);

然后調用另一個啟動為的函數

void fixErrors(int lineIndex, char *word){
  char *line;
  strcpy(line, lines[lineIndex]);

第一個函數有效,但在調用第二個函數時出現段錯誤。 lineIndex 對於這兩個詞是相同的,除了在 strcpy() 中之外,findErrors 不會調用 lines 數組。 為什么會這樣? 這是使用該功能的糟糕方式嗎,我只是在第一個功能上很幸運? 如果我將 fixErrors 中的行從

char *line;

char line[255];

但我寧願沒有在一條巨大的線上出現另一個段錯誤的可能性。 我想我也可以

char *line = malloc(strlen(lines[lineIndex])+1)

但我真的很好奇為什么第一種方法不起作用。

void findErrors(int lineIndex){
  char *line;
  strcpy(line, lines[lineIndex]);
//^ this is undefined behaviour.

在這一點上, line未初始化,將某些內容復制到未初始化的指針會導致未定義的行為,通常是段錯誤。

但是,如果偶然line指向某個有效內存,則程序可能不會崩潰,並且看起來好像可以正常工作。 這是未定義的行為。

工作情況:

void findErrors(int lineIndex){
  char line[255];
  strcpy(line, lines[lineIndex]);

這里line指向一個長度為 255 的緩沖區。 只要源字符串的長度小於 254,你就可以毫無問題地strcpy到這個緩沖區。

為什么“小於 254”而不是 255 ?

因為我們還需要一個字符作為零終止符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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