gpt4 book ai didi

c - 将 fgets 的缓冲区存储在数组中

转载 作者:行者123 更新时间:2023-12-01 23:56:30 25 4
gpt4 key购买 nike

我是 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++;
}

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

最佳答案

我建议您按如下方式更改代码。

#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;
}

关于c - 将 fgets 的缓冲区存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23427883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com