首页 > 解决方案 > 如何在C中将字符附加到字符串文字

问题描述

所以我看到有些人不建议使用字符串文字在 C 中创建 char。但是,我发现这是最有用的方法,并且我有一个 char 集

char a[] = "456";

我知道内存是固定在这种数据类型中的。但是,在我的作业中,我相信我需要能够为我的 char 值重新分配内存,因为我正在添加表示为字符串的整数。例如:

char b[] = "500";
char c[] = "501";
//add function for adding b and c. have a char d[] equal to "1000". 

我正在使用长加法来完成此操作。我尝试过使用 realloc 函数,但没有奏效。我如何不断地将新字符附加到字符串上?

标签: ccharappend

解决方案


对于您的分配,您必须定义一个具有足够空间来保存结果的目标数组,这对于加法很容易确定:它是最长参数的长度加上可能的额外数字的一个字符加上空终止符的一个字符.

您可以分配这个数组malloc()并返回一个指针。

这是一个例子:

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

char *bigadd(const char *a, const char *b) {
    size_t alen = strlen(a);
    size_t blen = strlen(b);
    size_t clen = (alen > blen) ? alen : blen;
    size_t mlen = (alen > blen) ? blen : alen;
    char *c = malloc(clen + 2);
    if (c != NULL) {
        size_t i;
        int carry = 0;
        c[clen] = '\0';
        for (i = 1; i <= mlen; i++) {
            carry += a[alen - i] - '0' + b[blen - i] - '0';
            c[clen - i] = '0' + carry % 10;
            carry /= 10;
        }
        for (; i <= alen; i++) {
            carry += a[alen - i] - '0';
            c[clen - i] = '0' + carry % 10;
            carry /= 10;
        }
        for (; i <= blen; i++) {
            carry += b[blen - i] - '0';
            c[clen - i] = '0' + carry % 10;
            carry /= 10;
        }
        if (carry) {
            memmove(c + 1, c, clen + 1);
            c[0] = (char)('0' + carry);
        }
    }
    return c;
}

int main(int argc, char *argv[]) {
    const char *a = argc > 1 ? argv[1] : "123456890123456890123456890";
    const char *b = argc > 2 ? argv[2] : "2035864230956204598237409822324";
    char *c = bigadd(a, b);
    printf("%s + %s = %s\n", a, b, c);
    free(c);
    return 0;
}

推荐阅读