gpt4 book ai didi

c - 将两个字符数组的值相加

转载 作者:行者123 更新时间:2023-11-30 18:27:32 25 4
gpt4 key购买 nike

如何将两个 char 中的两个数值相加数组?

示例:char array1[2]="12", array2[2]="98";

我想添加 array1 的值和array2 .

提前致谢。

最佳答案

警告:

char array1[2]="12", array2[2]="98";

大小 2 不足以保存空终止字符,必须为 3

更安全的方法是让编译器自行决定维度:

char array1[]="12", array2[]="98";

I want to add two numerical values from two string arrays.

有多种方法可以做到,不太安全的是使用 atoi因为即使数字无效,您也会得到结果,更安全的方法是使用 strtol如果它们包含long (你没有说它们是否可以包含 double 等)。

示例:

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

int main()
{
char array1[]="12", array2[]="98";
long l1, l2;
char * endp;

errno = 0;

l1 = strtol(array1, &endp, 10);
if ((errno != 0) || (*array1 == 0) || (*endp != 0)) {
printf("not (only) a valid long in %s\n", array1);
return -1;
}

l2 = strtol(array2, &endp, 10);
if ((errno != 0) || (*array2 == 0) || (*endp != 0)) {
printf("not (only) a valid long in %s\n", array2);
return -1;
}

printf("%ld + %ld = %ld\n", l1, l2, l1+l2);
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out
12 + 98 = 110

请注意,程序并不指示 " 12" 错误。但用 "12 " 表示一个,如果你想也拒绝" 12"你可以这样做:

if ((errno != 0) || !isdigit(*array1) || (*endp != 0)) 

array1相同。 isdigit#include <ctype.h> 中声明

<小时/>

根据您的评论

a easy way to do that will be good for me

如果您绝对确定数组包含int的有效外部表示,您可以使用atoi (atol em>等)。 atoi 也会绕过预期的 int

之前的空格
#include <stdio.h>
#include <stdlib.h>

int main()
{
char array1[]="12", array2[]="98";

printf("%s + %s = %d\n", array1, array2, atoi(array1) + atoi(array2));
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
12 + 98 = 110

但再次警告,atoi("aze")默默地返回 0 就像你这样做 atoi("0")

<小时/>

strtod 系列的替代方案是 sscanf,它比 atoi 系列更安全,因为它指示您是否阅读了数字的一部分以及是否存在溢出。如果你只是使用"%d"例如,您无法知道读取的整数后面是否有某些内容,但您可以使用 "%d%c"仍在检查 sscanf 返回 1(如果数字 sscanf 返回 2 之后有某些内容):

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

int main()
{
char array1[]="12", array2[]="98";
int l1, l2;
char c;

errno = 0;
if ((sscanf(array1, "%d%c", &l1, &c) != 1) || errno){
printf("not (only) a valid int in '%s'\n", array1);
return -1;
}

if ((sscanf(array2, "%d%c", &l2, &c) != 1) || errno) {
printf("not (only) a valid int in '%s'\n", array2);
return -1;
}

printf("%d + %d = %d\n", l1, l2, l1+l2);
}

编译与执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra a1.c
pi@raspberrypi:/tmp $ ./a.out
12 + 98 = 110

与其他函数一样,预期数字之前的空格也会被绕过。

关于c - 将两个字符数组的值相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55088027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com