簡體   English   中英

來自fget的輸入未正確使用sscanf存儲

[英]input from fgets not stored using sscanf properly

因此,我的代碼只有這一部分(基本上是整個程序的輸入)。

它必須采用最多包含20個字符的字符串形式,並且兩個整數都由空格分隔。

例如主人1 1

int main(void)
{

  int i, x, y;
  char input[28];
  char* name = NULL;
  fgets(input, 28, stdin);
  sscanf(input, "%s %i %i", name, &x, &y);
  printf("%s %i %i\n", name, x, y);
  return 0;
}

基本上,我試圖將其打印出來,以查看程序是否正確存儲了輸入,因為稍后必須將其存儲在鏈接列表中。

一切工作正常,但是無論我鍵入什么,它都會打印出(空)04196064。如果我在sscanf()函數中加上名稱的和號,也會出現段錯誤。

任何有關如何解決此問題的想法將不勝感激!

sscanf不會為您的字符串分配存儲空間。

char name[28];

將工作。 &name會導致seg.fault,因為間接尋址級別有所不同。 然后傳遞的是char * *,它在sscanf中被解釋為char *。 因為您的name變量在堆棧上,所以&name指向堆棧,因此sscanf將覆蓋您的堆棧內容。 這很容易導致段錯誤。

恐怕以下更改了nametype ,從字符指針更改為字符數組。兩者不同:

  char name[28];

所以這會更合適:

#include<stdio.h>
#include<stdlib.h>

int main(void)
{

  int i, x, y;
  char input[28];
  char* name = malloc(28*sizeof(char)); //No need to change type of "name"
   printf("Enter your stuff\n");
  fgets(input, 28, stdin);
  sscanf(input, "%s %i %i", name, &x, &y);
  printf("%s %i %i\n", name, x, y);
  return 0;
}

在代碼中,你已經嘗試寫入地址name使用sscanf()即使你還沒有分配的任何內存it.This會導致賽格故障,輸出將是unpredictable.In上面的代碼中malloc()有用來分配適當大小的內存塊並將地址分配給name 。然后正常工作。

暫無
暫無

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

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