[英]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.