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

标签 c arrays

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

相关文章:

javascript - 在javascript中将多个数组分成相等的 block

php - 查看一组数据的最佳方法

javascript - 在 JS 中切片并平均(减少)数组

具有可执行依赖项的 Python C 扩展

c - 如何阅读直到换行

c - execl() 似乎没有从标准输入中读取

c - 访问函数中的数组时发生访问冲突(函数内部)

c++ - SDL_RenderCopy() 不适用于数组

javascript - 无法理解这个涉及简单 for 循环的基本算法?

无法杀死从 Spawn 开始的 PID