我是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++;
}
也编译了,但当然我有一个指向缓冲区的指针,它只保存已读取的最后一个字符串。 我该怎么做才能存储一个简单的字符串数组?
答案 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);
}