gpt4 book ai didi

c - 读取和保存未知长度字符串的已知行数

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:08 25 4
gpt4 key购买 nike

我想接收用户输入的行数,然后读取未知长度的行并将其保存在一个数组中。

我知道我保存行的方式是错误的,但我不知道如何改正它。

int nos; // number of strings
scanf_s("%d", &nos);
char** strs = malloc(nos * sizeof(char*)); // array of strings
for (int i = 0; i < nos; i++) // receiving strings
{
scanf_s("%s", (strs+i));
}

最佳答案

你很接近,但你忘记为字符串分配内存。如果您使用的是 POSIX 兼容系统(即除 Windows 之外的几乎所有系统),则使用 %ms scanf() 格式说明符为字符串分配缓冲区你正在阅读它(请注意,这会在空格后停止):

scanf("%ms", &strs[i]);

对于 Windows,实现一个类似于 gets() 的函数:

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

int msgets(char **str)
{
int ch = 0;
size_t len = 0;

while(ch != '\n')
{
len++;
*str = realloc(*str, len);
ch = getchar();
(*str)[len-1] = ch;
}
(*str)[--len] = 0;
return len;
}

下面是如何使用它来替换 scanf() 行:

msgets(&strs[i]);

除此之外,您的代码看起来还不错。

这是一个包含我的代码的几乎完整的示例:

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

int msgets(char **str)
{
int ch = 0;
size_t len = 0;

while(ch != '\n')
{
len++;
*str = realloc(*str, len);
ch = getchar();
(*str)[len-1] = ch;
}
(*str)[--len] = 0;
return len;
}

int main(void)
{
int nos; // number of strings
scanf("%d ", &nos);
char** strs = malloc(nos * sizeof(char*)); // array of strings
for (int i = 0; i < nos; i++) // receiving strings
{
msgets(&strs[i]);
}
/* Do something with strs[] here */
return 0;
}

关于c - 读取和保存未知长度字符串的已知行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55974117/

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