簡體   English   中英

為什么在第一次輸入后連續的 fgets 和 sscanf 不工作

[英]Why aren't consecutive fgets and sscanf working after the first input

我知道已經有一些與此類似的問題,但在我的情況下,我真的不明白我做錯了什么。

我必須收集 5 個變量,3 個是可以多於一個單詞的字符串,另外 2 個是整數。

這是針對我需要上交的程序,並且輸入需要與我在下面發布的完全相同。

我還需要專門使用 sscanf 和 fgets 而不是 scanf 或 getchar()。

int main()
{
    char linha[200];
    char * nome;
    char * autor;
    char * genero;
    char anoChar[200];
    int * ano;
    char duracaoChar[200];
    int * duracao;

    printf(">");

    fgets(linha, sizeof linha, stdin);
    sscanf(linha, "%[^\n]", nome);

    fgets(linha, sizeof linha, stdin);
    sscanf(linha, "%[^\n]", autor);

    fgets(linha, sizeof linha, stdin);
    sscanf(linha, "%[^\n]", genero);

    fgets(linha, sizeof linha, stdin);
    sscanf(linha, "%[^\n]", anoChar);
    *ano=atoi(anoChar);

    fgets(linha, sizeof linha, stdin);
    sscanf(linha, "%[^\n]", duracaoChar);
    *duracao=atoi(duracaoChar);

    printf("%s %s %s %d %d", nome, autor, genero, ano, duracao);

    return 0;
}

我已經嘗試輸入每個示例:

  Dreams
  Singer
  pop
  1970
  10

但它會停止閱讀“夢想”並關閉程序

這些變量:

char * nome;
char * autor;
char * genero;
int  * ano;
int  * duracao;

可能是你的問題。 它們是在第一次使用之前尚未初始化的指針,因此在調用它們的第二次調用未定義的行為 這意味着它們可能指向 memory 可能已經分配給另一個進程使用,或者更糟糕的是可能指向 memory 當前未使用,因此允許訪問 go 使您的代碼可見,但確實沒有問題滴答作響的定時炸彈。

要么使用 arrays,

char nome[80]={0};
char autor[80]={0};
char genero[80]={0};
... etc.

或初始化指向某物的指針:

char * nome = malloc(80);
if(nome)
{... //test before using allocated memory
     //... do same with others

@pmg 建議將指針更改為 arrays 並且它有效。

暫無
暫無

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

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