简体   繁体   中英

strcpy seg fault in C

Curious about what is going wrong with this strcpy.

int main(void){
    char *history[10];
    for(int i = 0; i < 10; i++){
        history[i] = NULL;
    }
    char line[80];
    fgets(line,80,stdin); 
    strcpy(history[0],line); //This line segfaults
}

You've created an array of NULL pointers. You then tried to copy characters onto NULL. That's a no-no.

EDIT: Your program could be optimized to this:

void main() {
   char line[80];
   fgets(line,80,stdin); 
}

Your history array is never used to generate any output. So, while others have pointed out you need to allocate memory, technically, you could simply do this:

history[0] = line;

That will be a valid pointer up until the line goes out of scope, which is when history goes out of scope so it won't matter.

You need to allocate memory for history[0] . As history[0] is assigned NULL referencing it or writing to it will/may cause segfault.

something like

//this will create memory for 100 chars
history[0] = malloc(sizeof(char) * 100); 
strcpy(history[0],line);

Or

//shortcut for both - this allocate new memory and returns pointer.
history[0] = strdup(line);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM