如何将两个 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/