首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字符附加到C中的字符串文本中

如何将字符附加到C中的字符串文本中
EN

Stack Overflow用户
提问于 2019-02-10 05:56:08
回答 2查看 824关注 0票数 2

因此,我看到有些人不建议在C中使用字符串文字来创建字符,但是,我发现这是最有用的方法,我的char设置为

代码语言:javascript
运行
复制
char a[] = "456";

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

代码语言:javascript
运行
复制
char b[] = "500";
char c[] = "501";
//add function for adding b and c. have a char d[] equal to "1000". 

我正在使用长加法来完成这个任务。我尝试过使用realloc函数,但它没有起作用。如何不断地将新字符添加到字符串中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-10 11:50:20

对于赋值,您必须定义一个具有足够空间以容纳结果的目标数组,对于添加而言,这很容易确定:它是最长参数的长度,加上一个可能的额外数字字符加上一个空终止符的字符。

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

下面是一个示例:

代码语言:javascript
运行
复制
#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;
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-10 10:29:19

所以我的看法是通过键入:

代码语言:javascript
运行
复制
char a[] = "456";

初始化大小为4的字符数组(3个字符+'\0')。在同一数组中存储更长时间的任何内容都可能导致未定义的行为,因此必须避免。长话短说:您可以修改这个数组的值,只要它的大小不改变。,您可以像这样初始化一个数组:

代码语言:javascript
运行
复制
char a[100] = "456";

为字符串的任何可能的添加留出一些额外的空间,但仅此而已,因为数组的大小在编译时是已知的,并且永远不会改变。还请注意,这个不会工作:

代码语言:javascript
运行
复制
char * a = "456";

这是一个只读字符串文字,不能修改或重新分配。

PS:我是新手,如果我错了,请纠正我!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54613764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档