c - 使用 malloc 时连接字符串长度的差异

标签 c arrays string

为了测试一些代码,我用 C 编写了以下程序:

int main(int argc, char *argv[])
{
    char *a = "hello ";
    char *b = "there";
    char *c = malloc(100);
    strcat(c, a); 
    strcat(c, b); 
    printf("length of a is %d\n", strlen(a));
    printf("length of concatenated string is %d\n", strlen(c));
    return 0;
}

这个的输出是:

length of a is 6
length of concatenated string is 11

现在我没有执行 malloc,而是执行了以下操作(其余代码相同):

char c[100];

输出变为:

length of a is 6
length of concatenated string is 12

我不明白为什么在 char 数组上使用指针会改变连接字符串的大小。

最佳答案

由于在调用malloc 后没有向c 中放入任何内容,因此调用strcat 会导致未定义的行为,因为分配的内存块可能根本不包含空终止符。在这种情况下,strcat 在搜索终止符期间最终会访问分配 block 之外的内存。

这应该使调用一致:

char *c = malloc(100);
*c = '\0';

关于c - 使用 malloc 时连接字符串长度的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298372/

相关文章:

c - 内联函数的多重定义

c - 使用第三个变量更改二维数组的基地址时出错

string - 重写 Haskell 中 String/Char 的 show 方法

c - 字符串到整数

c - C语言输出字符串的三元运算

java - 生成比数组长度更长的所有可能组合

java - 在 Java 中输入字符串的每个单词的末尾 append 一个字符串

regex - R 列表字符删除

c - c中的while循环不重复

javascript - 我需要编写一个函数,循环遍历数字数组,并返回数组中的奇数和偶数。