奇怪的strncpy,fgets的行为

时间:2014-08-13 04:23:28

标签: c stdin fgets strncpy

我基本上是编写代码来读取存储其余字符串的东西,如果它以l开头。到目前为止,这是我的代码:

char input[80];
char fileName[80];

fgets(input, 80, stdin);   //Need to use because only want to read maximum 80 characters

if(input[0] == 'l') {
    printf("String length: %d\n", strlen(input));
    printf("String input: %s", input);
    strncpy(fileName, &input[1], (strlen(input)) -2);
    fileName[strlen(input)-1] = '\0';
    printf("Filename to save: %s \n", fileName);
}

当我输入ljudyjudyjudyjudy时 我在printf时获得的文件名是judyjudyjudyjudyH

它有时会使用不同的输入,但有时会支持额外的字符?

1 个答案:

答案 0 :(得分:4)

我认为你不在乎:

fgets(input, 80, stdin);   //Need to use because only want to read maximum 80 characters

if(input[0] == 'l') {
    printf("String length: %d\n", strlen(input));
    printf("String input: %s", input);
    strncpy(fileName, &input[1], (strlen(input)) -2);
    fileName[strlen(input)-2] = '\0'; // should be -2 instead
    printf("Filename to save: %s \n", fileName);
}

在以"ljudyjudyjudyjudy"为输入的示例中,您希望将fileName[16]设置为'\0'而不是fileName[17]