我试图用C语言编写一个小程序,但我一直试图增加一个int
。
#include<stdio.h>
#include<string.h>
char * compress(char *input, int size){
char *inputCopy;
char compressedString[100];
snprintf(inputCopy, size, "%s", input);
int i = 0;
int counter;
int j;
while(i < size){
counter = 1;
j = i;
while (inputCopy[j] == inputCopy[j + 1] && j < size){
j++;
printf("same! \n");
counter++; // When this line is commented out it works.
}
if (i != j){
i = j;
}else{
i++;
}
}
return inputCopy;
}
main(){
char test[10] = "aaaaaaasdd";
printf("%s \n", compress(test, 10));
printf("%s", test);
return 0;
}
由于某种原因,
counter++
行使我的程序崩溃。我知道这可能很简单,但有人能告诉我为什么这不起作用吗?
最佳答案
您没有为snprintf
分配数据。inputCopy
未初始化,因此它可能正在通过counter
使用的内存进行写入确保分配了必要的内存。
与此崩溃无关,但有可能出现无效读取(inputCopy[j + 1]
)。将j < size
切换到(j + 1) < size
并将其移到while
的开头,这样会短路。valgrind
(或Clang的地址消毒剂)可以帮助您在Linux系统上捕获这两个问题。