我正在用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个空间的分配空间。
我真的很感激你的帮助。- 谢谢-谢谢
1条答案
按热度按时间42fyovps1#
字符串
此时,我们甚至不知道
malloc
是否成功分配了内存。如果是这样,内存是未初始化的,使用它与函数,如strlen
调用undefined behavior。如果你希望字符串至少是“空”的,那么第一个字符必须是
'\0'
。这可以通过使用calloc
而不是malloc
来实现。型