我编写了以下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
输入另一个字符串:Alladin
输入另一个字符串:Barack Obama
输入另一个字符串:正确读取字符串....
显示所有字符串:
AllaBaraObama
BaraObama
奥巴马
问题:
1)为什么一根字符串根本不作为输入?
2)为什么显示的字符串像那样乱码?
如果我使用gets()或fgets()代替scanf(),问题是一样的。
答案 0 :(得分:4)
arr [i]已经是一个指针,你不需要&amp;
答案 1 :(得分:1)
最好使用数组(二维)而不是指针数组。 我很难纠正你的代码。所以我将代码更改为
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LENGTH 50
void readInStrings(char (*arr)[MAX_STRING_LENGTH],int n)
{
int i;
for(i = 0 ; i< n+1; ++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+1;i++){
printf("%s",arr[i]);
}
}
int main()
{
printf("Enter the number of entries : ");
int n;
scanf("%d",&n);
char strings[n][MAX_STRING_LENGTH];
readInStrings(strings,n);
return 0;
}
答案 2 :(得分:1)
删除&amp; (正如第一个回答者所指出的)scanf("%s",&arr[i]);
和printf("%s\n",&arr[i]);
为我做了诀窍。另外,请注意,如果您编写了最高警告,您的编译器会立即告诉您&amp;错了。