main.c中(與像標準輸入輸出,STDLIB,等所有的頭):程序執行在scanf處停止?
int main()
{
int input;
while(1)
{
printf("\n");
printf("\n1. Add new node");
printf("\n2. Delete existing node");
printf("\n3. Print all data");
printf("\n4. Exit");
printf("Enter your option -> ");
scanf("%d", &input);
string key = "";
string tempKey = "";
string tempValue = "";
Node newNode;
Node temp;
switch (input) {
case 1:
printf("\nEnter a key: ");
scanf("%s", tempKey);
printf("\nEnter a value: ");
scanf("%s", tempValue); //execution ternimates here
newNode.key = tempKey;
newNode.value = tempValue;
AddNode(newNode);
break;
case 2:
printf("\nEnter the key of the node: ");
scanf("%s", key);
temp = GetNode(key);
DeleteNode(temp);
break;
case 3:
printf("\n");
PrintAllNodes();
break;
case 4:
exit(0);
break;
default:
printf("\nWrong option chosen!\n");
break;
}
}
return 0;
}
storage.h定義:
#ifndef DATABASEIO_H_
#define DATABASEIO_H_
//typedefs
typedef char *string;
/*
* main struct with key, value,
* and pointer to next struct
* Also typedefs Node and NodePtr
*/
typedef struct Node {
string key;
string value;
struct Node *next;
} Node, *NodePtr;
//Function Prototypes
void AddNode(Node node);
void DeleteNode(Node node);
Node GetNode(string key);
void PrintAllNodes();
#endif /* DATABASEIO_H_ */
我使用Eclipse CDT的,當我輸入1,然後,我輸入一個密鑰。然後控制檯說。我用gdb並得到這個錯誤:
Program received signal SIGSEGV, Segmentation fault.
0x00177024 in _IO_vfscanf() from /lib/tls/i686/cmov/libc.so.6
任何想法爲什麼?
A推薦。不要將字符串typedef char *。將它保留爲char *應該可以幫助你記住,在使用它們之前,你必須爲每一個分配內存。 – 2010-04-18 15:51:49
剛纔改變了。 – 2010-04-18 16:05:45