微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C 中使用 char* arr 输入和读取超过 200 个字符的超长数字

如何解决在 C 中使用 char* arr 输入和读取超过 200 个字符的超长数字

我被困在一项作业上,我必须从控制台读取非常长的数字,然后使用 char* arr 将其打印出来。然后我需要将数字 1 数组添加和减去数字 2 数组。老实说,我可能会自己处理加减法,但我无法弄清楚如何逐个字符地读取这些输入字符,并在控制台输入后中断。

我的代码

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

int subtract(const char* number1,const char* number2,char** result){
if(number1 == NULL || number2 == NULL){
        return 1;
    }
return 0;
}
int add(const char* number1,char** result) {
    if(number1 == NULL || number2 == NULL){
        return 1;
    }
    return 0;
}

int input_check(int check,char* number) {
    if (check != 1) {
        return 1;
    }
    else {
        return 0;
    }

}

int main()
{
    char* number1;
    //char* number2;
    //char** result;
    int check = 0;

    number1 = (char*)calloc(200,sizeof(char));
    //number2 = (char*)calloc(200,sizeof(char));
    //result = (char*)malloc(sizeof(char) * sizeof(char) * 400);
    if (number1 == NULL) {
        printf("Failed to allocate memory");
        return 8;
    }
    
    printf("Input first num: ");
    
    int i = 0;
    while (1) {
        char retVal;
        scanf("%c",&retVal);
        if (retVal >= 48 || retVal <= 57 || retVal != '\0') {
            *(number1 + i) = retVal;
            if ((number1 + i) == NULL) {
                break;
            }
            printf("%d",atoi((number1 + i)));
            i++;
        }
        else
        {
            break;
        }
    }
    
    return 0;
}

感谢您的帮助

解决方法

由于没有数量限制,所以需要使用动态内存分配。

直接(蛮力)方法是不断增加分配的大小

char *input = calloc(1,1); // space for '\0'
size_t len = 0;
for (;;) {
    int ch = getchar();
    if (ch != '\n') {
        input[len] = ch; // replace '\0' with ch
        len++;
        char *tmp = realloc(input,len + 1);
        if (tmp == NULL) exit(EXIT_FAILURE);
        input = tmp;
        input[len] = 0; // add '\0'
    } else {
        break;
    }
}
// use input and len
free(input);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。