我试图用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系统上捕获这两个问题。

10-07 15:35