C: Как исправить ошибку сегментации, когда я хочу открыть и записать файл? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь открыть файл, но я не переключаю «r» на «rt» и «at +», «fp» всегда возвращает NULL. И после того, как я введу строку, на выходе будет ошибка сегментации. Где ошибка, которую я сделал? Пожалуйста, помогите мне с этим

#include <stdio.h>
#include <string.h>
int main(){
    FILE *fp;
    char str[120] = {0}, strTemp[100];
    if( (fp=fopen("/User/don/Vim/code.c", "at+")) == NULL ){
        printf("Cannot open file\n");
    }
    printf("Input a string:");
    gets(strTemp);
    strcat(str, "\n");
    strcat(str, strTemp);
    fputs(str, fp);
    fclose(fp);
    return 0;
}

ожидаемый результат:

 Input a string: hello

фактическая мощность:

 Cannot open file
 Input a string: hello
 Segmentation fault: 11

1 Ответ

0 голосов
/ 21 января 2019

заменить

if( (fp=fopen("/User/don/Vim/code.c", "at+")) == NULL ){
    printf("Cannot open file\n");
}

от

if( (fp=fopen("/User/don/Vim/code.c", "at+")) == NULL ){
    printf("Cannot open file\n");
    return 0;
}

иначе вы будете использовать нулевой указатель после fputs(str, fp);

как говорит Jabberwocky получает опасно, потому что вы можете переполнить буфер, более безопасно использовать fgets

конечно, вы также можете выполнять свою работу в else ветке:

#include <stdio.h>
#include <string.h>
int main(){
  FILE *fp;
  char str[120] = {0}, strTemp[100];
  if( (fp=fopen("/User/don/Vim/code.c", "at+")) == NULL ){
    printf("Cannot open file\n");
  }
  else {
    printf("Input a string:");
    fgets(strTemp, sizeof(strTemp), stdin);
    strcat(str, "\n");
    strcat(str, strTemp);
    fputs(str, fp);
    fclose(fp);
  }

  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...