gpt4 book ai didi

C: ???正在添加到 sizeof(string) 之外的我的字符串中

转载 作者:行者123 更新时间:2023-11-30 18:45:28 24 4
gpt4 key购买 nike

我正在开发一个简单的加密程序,它需要一个密码并将其拆分以进行一些数学运算。

我注意到,当我回显分割密码时,会出现一个额外的“???”被添加到最后。

我检查了分割字符串的 sizeof() ,我发现没有剩余空间。分割密码字符变量的大小不应允许这种情况。

这是什么原因造成的?

这是main()内部的函数调用

假设我输入“已读”

char pass[25];
printf("Enter Pass. Max 25 characters \n");
scanf("%s", pass);
encrypt(pass);

代码

void encrypt(char *pass) {      
int length = strlen(pass);
int half = length/2;
char half1[half];
char half2[half];

for (int i = 0; i < half; ++i) {
half1[i] = pass[i];
half2[i] = pass[(half + i)];
}

printf("\n%s\n", half1);
printf("%s\n", half2);
printf("%d\n", length);
printf("%d\n", half);
printf("%d\n", sizeof(half1));


}

输出

re???
ad???
4
2
2

最佳答案

C 中的字符串需要以 NUL 结尾。您需要分配一个额外的字符,并用 0 填充它,以便 C 识别它们的结尾,否则您将读取超过它们的结尾并可能得到垃圾(如果您幸运的话)。

另请注意,除法向下舍入。如果有 5 个字符,则一半为 2; 2*2 是 4,所以丢失了一个字符。

关于C: ???正在添加到 sizeof(string) 之外的我的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758491/

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