c - 如何在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 函数,但没有奏效。我如何不断地将新字符附加到字符串上?
解决方案
对于您的分配,您必须定义一个具有足够空间来保存结果的目标数组,这对于加法很容易确定:它是最长参数的长度加上可能的额外数字的一个字符加上空终止符的一个字符.
您可以分配这个数组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;
}
推荐阅读
- mongodb - 基于查找逻辑的MongoDB预存储集字段
- android - Android 应用程序不断抛出 java NullPointerException 并崩溃
- google-maps - Flutter Google Maps - 为什么我在 Google Maps 中看不到我的标记?
- kubernetes - 在受限集群中创建 kubernetes 仪表板,在该集群中您被禁止使用角色、角色绑定等,并且在命名空间之外无权访问
- nginx - proxy_pass 的 Nginx $args 操作
- python - 将输入矩阵与用户分离
- python - 提取括号之间的文本并为每一位文本创建行
- polygon - 为什么匀称的“差异”和“交叉”返回意外结果?
- java - Amazon Corretto 8 容器感知
- wso2 - 如何删除 WSO2 IS 中特定 ServiceProvider 的特定用户的会话?