Malloc给了我一个非空的字符串,我无法清空它

vsdwdz23  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(61)

我正在用C语言写一个程序,它遍历一个字符串,并将每个字母表中的字母替换为字母表中它后面的13个字母(基本上是凯撒密码)。
我是C语言的新手,我在处理字符串时遇到了困难。我现在的问题是,当我在第2行初始化一个新的字符串时,由于某种原因,字符串中已经有了随机的东西。我知道这一点是因为当我打印第3行的字符串时,我看到3个随机字符(它们并不总是相同的,它们每执行几次代码就会改变一次)。
下面是我的代码的相关部分:

printf("The original string is %s\n", src);
    char *result = malloc(strlen(src) * sizeof(char) + 1);
    printf("Right off the bat, the result string looks like: %s\n", result);
    for (int index = 0; index < strlen(result); index++) 
    {
        result[index] = "\0";
    }
    printf("Now, the result string looks like: %s\n", result);

字符串
我在第4-7行中的循环试图通过将字符串中的每个字符都设置为null来清空字符串。更奇怪的是,这个循环不起作用,因为当我在第8行再次打印字符串时,它仍然不是空的。现在,虽然,而不是有随机的垃圾,它有一个字母“j”重复4次在前4个空间的分配空间。
我真的很感激你的帮助。- 谢谢-谢谢

42fyovps

42fyovps1#

char *result = malloc(strlen(src) * sizeof(char) + 1);

字符串
此时,我们甚至不知道malloc是否成功分配了内存。如果是这样,内存是未初始化的,使用它与函数,如strlen调用undefined behavior
如果你希望字符串至少是“空”的,那么第一个字符必须是'\0'。这可以通过使用calloc而不是malloc来实现。

char *result = calloc(strlen(src)+1, 1); // sizeof(char) is 1

相关问题