c - 当给出长度为 48 或更长的字符串时出现段错误

标签 c

我编写了一个函数,它接收一个字符串并简单地对该字符串进行编码(如果您愿意,可以压缩)该格式的字符串:input = aassda,output = 2a2s1d1a。我的问题是,如果我输入一个 47 个字符或更长的字符串,我会遇到段错误。我附上了下面的功能。我大约一周前开始使用 C,所以请多多包涵 =/

编辑:任何改进建议也很好。我知道我可以使代码更有效率,但由于我对 python 的了解很少,所以我决定以最直接的方式进行。

最佳答案

string 只是一个垃圾指针。它永远不会被设置,也永远不会与任何内存相关联。您需要为 string malloc() 一些内存(完成后不要忘记 free() 它!),或者你需要把它做成一个数组。也就是说,您的两个选择是:

使用malloc()/free():

int main()
{
    char* string = malloc(51); // Room for 51 chars (50 letters and 1 null terminating character)

    printf("Please input a string of at most 50 chars: ");
    scanf("%s", string);
    lame_function(string);

    free(string);
}

使用数组:

int main()
{
    char string[51]; // Room for 51 chars (50 letters and 1 null terminating character)

    printf("Please input a string of at most 50 chars: ");
    scanf("%s", string);
    lame_function(string);
}

关于c - 当给出长度为 48 或更长的字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451908/

相关文章:

c - 简单 C 函数的输出是什么,为什么?

c - 在输入上动态分配二维数组

c - 链接器如何生成最终的虚拟内存地址?

c - 如何在不使用任何内置函数的情况下将整数转换为 C 字符串,反之亦然以及其他数据类型?

c - 如何从 C 程序构建用于 Unix system() 调用的字符串

c - 我如何获得C中目录的大小?

c - 如何在C中创建多个函数

php - 寻找一个钟形曲线公式来呈现在一个范围内具有零到完全影响的数据

c - 我的 C 代码有问题,但我看不到错误。这是一个简单的程序

c - 来自内核的信号用户应用程序