从C中的用户获取的字符串正在被扰乱

时间:2011-03-19 04:47:44

标签: c scanf cstring gets

我编写了以下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(),问题是一样的。

3 个答案:

答案 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;错了。