我已經編寫了以下C代碼以獲取來自用戶的字符串列表。但存儲的字符串正在發出奇怪的值。從C中的用戶採集的字符串正在被加擾
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LENGTH 50
void readInStrings(char* arr[],int n)
{
int i=0;
char line[MAX_STRING_LENGTH];
for(i=0;i<n;i++){
arr[i]=malloc(MAX_STRING_LENGTH);
printf("Enter another string : ");
scanf("%s",&arr[i]);
//fgets(&arr[i],MAX_STRING_LENGTH,stdin);
}
printf("Strings read in correctly.... \n");
printf("Displaying out all the strings: \n");
for(i=0;i<n;i++){
printf("%s\n",&arr[i]);
}
}
void testStringInputs()
{
printf("Enter the number of entries : ");
int n;
scanf("%d",&n);
char* strings[n];
readInStrings(strings,n);
}
輸入採樣:
輸入的條目數:3
輸入另一個字符串:阿拉丁
輸入另一個字符串:奧巴馬
輸入另一個字符串:字符串讀取正確.. ..
顯示出所有的字符串:
AllaBaraObama
BaraObama
個 奧巴馬
問題: 1)爲什麼是一個字符串沒有采取作爲輸入呢?
2)爲什麼顯示的字符串像這樣亂碼?
如果我使用gets()或fgets()代替scanf(),問題是一樣的。
如果您在答案中給出了更正,那麼fgets是一個更安全的選項。您可以輕鬆地使用scanf(和%s)溢出緩衝區或獲取。 – jonsca 2011-03-19 05:04:24
如果我在printf語句中不使用&arr [i],程序崩潰。即使使用fgets(),問題仍然存在,字符串出現亂碼。並且循環的輸入的一次迭代也被跳過。 – 2011-03-19 05:15:41