c - 增加算术类型的值,存储在 C 中的 char 数组中

标签 c arrays string increment function-call

我对小型设备进行编程,这些设备相互通信,我需要用唯一的 ID 来标记每个操作(而且有很多操作)。由于架构的原因,我不能使用大于 int (4 字节)的任何东西。因此,我想到将 ID 存储为 char 数组,每次在这样的场景中调用某个函数时都会递增该数组:

void increaseIDByOne(char *ID){
  //increase "string"
}

int main (int argc, char *argv[]){
  char ID [12] = "00000000000";
  while(true){
    doStuff(&ID); 
    increaseIDByOne(&ID);
  }
}

我遇到的问题是,我不知道如何操作“字符串”而不将其临时转换为算术类型。当 ID 达到值“99999999999”后,系统应该有一个解决方案,通过为该号码分配更多空间或使用其他解决方案来防止溢出或 ID 重复。 我希望您能为我提供正确的想法,以便我找到解决问题的方法。

最佳答案

没有负数使问题变得更加简单。只要有可能溢出,Simplr 就使用 realloc:

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

void increaseIDByOne(char *ID){
  //increase "string"
  size_t len = strlen(ID);
  int all9 = 1;
  //int carry = 0;
  for(size_t i=0;i<len;i++)
  {
    if(ID[i]=='9')
        continue;
    else
    {
        all9 = 0;
        break;
    }
  }
  if(all9)
  {
    ID = realloc(ID, len + 2);
    ID[len] = '0';
  }
  len = strlen(ID);
  for(size_t i=len-1;i>=0;i--)
  {
    if(ID[i]=='9')
    {
        ID[i] = '0';
    }
    else if(ID[i]<'9')
    {
        ID[i]++;
        return;
    }
    //printf("%c\n", ID[i]);
  }
}

int main (int argc, char *argv[]){
  char *ID = malloc(12);
  strcpy(ID, "99999999995");
  while(1){
    //doStuff(&ID); 
    increaseIDByOne(ID);
    printf("%s\n",ID);
  }
}

输出:

99999999996
99999999997
99999999998
99999999999
999999999991
999999999992
999999999993
999999999994
999999999995
999999999996
999999999997
999999999998
999999999999
9999999999991
9999999999992
9999999999993
9999999999994
9999999999995
9999999999996
9999999999997
9999999999998
9999999999999
99999999999991
99999999999992
99999999999993
99999999999994
99999999999995
99999999999996
99999999999997
99999999999998
99999999999999
and so on...

关于c - 增加算术类型的值,存储在 C 中的 char 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005895/

相关文章:

C getchar 与 scanf

javascript - 遍历对象,其中值是对象数组,并从对象数组的每个对象返回一个值

arrays - mongodb查询大于和小于的数组值

java - 在 Android 中比较电话号码

c - 在 Windows 中的套接字上使用 fprintf

c - 在c中实现快速排序

c - 有没有办法在 C 中使用/调用 COM 接口(interface)?

java - 在 Java 中使用 getJSONArray() 和 getJSONObject() 从 JSON 文件获取元素

Javascript 正则表达式 - 匹配句子并忽略引号中的句号

Java GUI 按钮不会将字符串打印到界面