在Array中存储fgets的缓冲区

时间:2014-05-02 12:11:27

标签: c string fgets

我是C的新手(来自Java)并且自然会带来一些困难。我想写一个简短的程序,从stdin读入char-Arrays并将各个字符串存储在一个数组中。读完字符串后,我只想把它们打印出来,但是当它让我感到困惑的时候。 这是我的代码:

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


int main(){

char **stringarray[2];
char buffer[5];
int i = 0;
while( i < 2 && fgets(buffer, 5, stdin) != NULL){
    char *tmp = buffer;
    stringarray[i] = &tmp;
    i++;
}

for(int i = 0; i < 2; i++){
    printf("%s\n", &stringarray[i]);

}

return 0;
}

第一部分确实编译(即打印输出前的部分)。我知道我的stringArray必须是一个char指针数组,因为这是一个char数组基本上是c。它是指向第一个角色的指针。起初我刚写了

while( i < 2 && fgets(buffer, 5, stdin) != NULL){
    stringarray[i] = buffer;
    i++;
}

也编译了,但当然我有一个指向缓冲区的指针,它只保存已读取的最后一个字符串。 我该怎么做才能存储一个简单的字符串数组?

3 个答案:

答案 0 :(得分:2)

我建议您将代码更改为以下内容。

#include <stdlib.h>
#include <stdio.h>
#include <string.h> /* to use strdup function */


int main(){

char *stringarray[2]; /* I don't understand why you use pointer to pointer than pointer, char **stringarray[2]; */
char buffer[6]; /* I suggest 6 than 5, because string has terminate byte in C */
int i = 0;
while( i < 2 && fgets(buffer, 5, stdin) != NULL){
    stringarray[i] = strndup(buffer, 5);
    i++;
}

for(int i = 0; i < 2; i++){
    printf("%s\n", stringarray[i]); /* changed stringarray */

}

return 0;
}

答案 1 :(得分:1)

char **stringarray[2];char ***stringarray类似,因为数组就像是指向数组第一个值的指针。

printf需要char*&stringarray[i]需要char**

如果字符串是数组,则字符串数组是数组

所以代码是:

 int main()
{
    char stringarray[2][5];//array of (array of char)
    char buffer[5];
    int i = 0;
    while( i < 2 && fgets(buffer, 5, stdin) != NULL)
    {
        strcpy(stringarray[i],buffer); //copies the buffer into the string array
        i++;
    }

    for(i = 0; i < 2; i++)
    {
        printf("%s\n", stringarray[i]);

    }
    return 0;
}

如果你不想使用buffer,你可以写一下:

    while( i < 2 && fgets(stringarray[i], 5, stdin) != NULL)
    {
        i++;
    }

请注意,您将获得5个字符,最后一个将是NUL终结符\0。并且因为您必须按Enter键进行验证,\0之前的行将是换行\n。你只需要3个你想要的角色。

答案 2 :(得分:0)

您可以使用动态分配技术完成此操作。

#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
int main()
{
   int num;
   int len=0;
   int i;
   printf("Enter the number of elements to be entered ");
   scanf("%d",&num);

   //Allocate memory for the array of strings 
   char **var=(char **)malloc(num * sizeof(char *));

   for(i=0;i<num;i++)
   {
      printf("Enter the string   : ");
      //get strings using getline 
      getline(&var[i],&len,stdin); 

   }
    for(i=0;i<num;i++)
   {
      printf("String %d   : %s \n",i,var[i]);


   }

    free(var);

}