创建字符串计数器-发生分段错误,我不确定为什么

问题描述 投票:0回答:1

我的代码旨在按“ a”,“ b” ...“ z”,“ aa” ..“ az”,“ aaa” ...“ aaz”等顺序创建一个计数器。

void incrementCounter(char *counter) {
  int length = strlen(counter);
  if (counter[length-1] == 'z') {
    counter = realloc(counter, sizeof(char) * (length+2));
    counter[length] = 'a';
    counter[length+1] = '\0';
  } else {
    counter[length-1]++;
  }
}

但是我在调​​用incrementCounter(“ a”);之后在第7行进行分段错误;

有关如何解决此问题或如何编写更好的计数器的任何帮助,它仅需为字符串且与之前的每个元素都不同?

c++ c counter
1个回答
1
投票

带引号的字符串“ a”是字符串常量。修改它是不确定的行为。

尝试类似

a = malloc(2);
if (a) {
    strcpy(a, "a");
    incrementCounter(a);
}

例如https://www.cs.uic.edu/~jbell/CourseNotes/C_Programming/CharacterStrings.html#:~:text=A%20String%20Literal%2C%20also%20known,terminted%20by%20a%20null%20byte

© www.soinside.com 2019 - 2024. All rights reserved.