gpt4 book ai didi

CS50 集成开发环境 : printf returns extra characters

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:05 25 4
gpt4 key购买 nike

我在使用 CS50 IDE 中的 printf 函数时遇到问题。当我使用 printf 打印出一个字符串(此代码中的 salt)时,正在输出原始参数 (argv) 中不存在的额外字符。

下面贴出我的代码。任何帮助,将不胜感激。谢谢。

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(int argc, string argv[])
{
// ensuring that only 1 command-line argument is inputted
if (argc != 2)
{
return 1;
}
char salt[2];
for (int i = 0; i < 2; i++)
{
char c = argv[1][i];
salt[i] = c;
}

printf("the first 2 characters of the argument is %s\n", salt);

}

最佳答案

salt 中缺少字符串终止符。

计算机需要以某种方式知道您的字符串在内存中的结尾位置。它通过读取直到遇到 NUL 字节(值为零的字节)来执行此操作。

你的数组 salt 恰好有 2 个字节的空间,在它们之后,存在随机垃圾,恰好在你的数组之后的内存中。由于您没有字符串终止符,计算机也会读取这些垃圾,直到遇到 NUL 字节。

您需要做的就是在您的数组中包含这样一个字节,如下所示:

char salt[3] = {0};

这将使 salt 长一个字节,{0}{0, 0, 0} 的简写使用所有 zerores 初始化数组的内容。 (或者,您可以使用 char salt[3];,然后使用 salt[2] = 0; 手动将最后一个字节设置为零。)

关于CS50 集成开发环境 : printf returns extra characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com