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

标签 c arrays

我不知道如何使用 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/

相关文章:

c++ - Ruby 中的多维数组类似于 C++

php - 如何将多维数组键更改为 Childs 键值?

c - 可以为 scanf ("%x"传递 int 的地址吗,...)?

c - 作业: Array splitting in C programming

javascript - 在对象数组中添加对象(对象是多维的)

javascript - 如何根据输入值数组返回对象数组的匹配结果

javascript - 使用javascript从数组创建一个对象

c - 多线程输出困惑

c - 如何可移植地打开大文件支持?

c - 确定链路层物理媒体类型