2011-04-13 22 views
1

我正在處理這個問題: 我一直在創建鏈接列表(使用結構),我想加載來自用戶的輸入。 當我調試此代碼時,調試器在scanf行停止。問題與掃描加載結構 - >字符[]

typedef struct Person{ 
char name[64]; 
int number; 
} Person; 

Person* record = malloc(sizeof(Person)); 
printf("Input name: \n"); 
scanf("%63s", record->name); 

我知道,(*記錄)。數== record->號和「&」用於獲取變量的ADRESS,但我不知道如何解決我的問題,如果在最簡單的方法我想要使用scanf來加載輸入。

在此先感謝。

+0

它沒有調試器工作嗎? – pmg 2011-04-13 11:56:13

+0

似乎工作..根據我。 – Sadique 2011-04-13 11:57:23

+2

這不僅僅是調試器正在等待您的輸入? – fnokke 2011-04-13 11:58:17

回答

1

當使用gdb調試程序並遇到scanf語句時,調試器將提示用戶輸入。如果您在該點輸入輸入並按Enter,則執行將繼續。

對於例如, 1.如果源代碼是在文件名中 'llist.c'

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

typedef struct Person{ 
char name[64]; 
int number; 
} Person; 

int main() 
{ 

    Person* record = malloc(sizeof(Person)); 
    if(record == NULL) 
    { 
     printf("Memory allocation failed\n"); 
     return; 
    } 
    printf("Input name: \n"); 
    scanf("%63s", record->name); 
    printf("Name %s\n", record -> name); 
    return 0; 
} 

編譯它使用調試選項,

GCC -g以下-o列表llist.c

  1. 運行調試器gdb ./list並輸入命令run啓動程序執行。
  2. 當提示輸入時,輸入任意字符串並按Enter鍵。
  3. 然後將字符串打印到終端。
+1

嗨,這可以工作,但是當我嘗試在Eclipse中運行或調試相同的程序時,它不起作用!同樣的問題。所以我認爲在Eclipse和Win之間肯定會出錯。 – Martin 2011-04-13 12:24:46