gpt4 book ai didi

c - 读取字符串并将其分配给数组

转载 作者:行者123 更新时间:2023-11-30 15:59:44 24 4
gpt4 key购买 nike

我不知道如何使用 scanf 并获取它的输入作为函数 readBigNum 的输入我想创建数组直到用户输入 Enter 并且我想编写一个函数将其分配给数组并返回大数的大小我希望 readBigNum 确切地具有 char *n 但我无法在我的函数中关联它

#include <stdio.h>

int readBigNum(char *n)
{
char msg[100],ch;
int i=0;
while((ch=getchar())!='\n')
{
if(ch!='0'||ch!='1'||ch!='2'||ch!='3'||ch!='4'||ch!='5'||ch!='6'||ch!='7'||ch!='8'||ch!='9')
return -1;
msg[i++]=ch;
}
msg[i]='\0';
i=0;
return i;
}

int main()
{
const char x;
const char n;
n=scanf("%d",x);
int h=readBigNum(&n);
printf(h);
}

最佳答案

如果我正确理解你的问题,你想要实现一个函数,从标准输入读取数字并将它们存储在缓冲区中。如果遇到非数字,则要返回-1。如果遇到换行符,您需要返回已读取的字符数。如果这是正确的,您可能希望您的代码如下所示:

#include <stdio.h>

int readBigNum(char* n)
{
char ch;
int i=0;
while ((ch = getchar()) != '\n') {
if (ch < '0' || ch > '9') {
return -1;
}
n[i++] = ch;
}
n[i] = '\0';
return i;
}

int main(void) {
char buf[100];
int bytes = readBigNum(buf);
printf("%s\n", buf);
printf("%d\n", bytes);
};

与您的实现的主要区别

  • 要填充的数组在 main 中初始化并传递给 readBigNum 函数。这比让函数控制内存要简单一些,在这种情况下,您可能需要处理 mallocfree。即使如此,您仍面临缓冲区溢出的风险,并且可能需要采取额外的预防措施来防止这种情况发生。
  • 该函数在返回之前不会将 i 设置为 0。原始代码永远不会返回 -1(出错时)或 0 以外的值,这似乎不是意图。
  • 此代码不使用 scanf。鉴于您对想要完成的任务的描述,使用 scanf 似乎不太合适,但是,如果您提供有关调用原因的更多信息,可能有助于告知此答案。<
  • printf 调用不正确,已更新为打印返回的字节数,并添加了一个额外的 printf 调用来打印更新后的缓冲区。<

关于c - 读取字符串并将其分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515782/

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