gpt4 book ai didi

c - 在 Visual Studio 中用 C 语言初始化字符串

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

我尝试使用 C 学习 XOR 算法。我在 KyleBank's GitHub 上找到了一个很好的例子:

#include <stdio.h>
#include <string.h>

void encryptDecrypt(char *input, char *output) {
char key[] = {'K', 'C', 'Q'}; //Can be any chars, and any size array

int i;
for(i = 0; i < strlen(input); i++) {
output[i] = input[i] ^ key[i % (sizeof(key)/sizeof(char))];
}
}

int main (int argc, char *argv[]) {
char baseStr[] = "kylewbanks.com";

char encrypted[strlen(baseStr)];
encryptDecrypt(baseStr, encrypted);
printf("Encrypted:%s\n", encrypted);

char decrypted[strlen(baseStr)];
encryptDecrypt(encrypted, decrypted);
printf("Decrypted:%s\n", decrypted);
}

以上在 Linux 和 gcc 下运行良好。但是,它不会在 Windows 下的 Visual Studio 中编译。

enter image description here

我正在使用 Visual Studio 2017 中包含的构建工具。

我做错了什么?

最佳答案

Microsoft 的编译器不支持 C99 VLA(参见注释 here)。数组大小必须是常量表达式。该代码也已损坏,因为它无法容纳并在输出中放置一个 nul 终止符。

在这种情况下,decryptedencrypted 可以这样声明:

char encrypted[sizeof(baseStr)] ;
...
char decrypted[sizeof(baseStr)] ;

并且 encryptDecrypt() 修改为:

void encryptDecrypt(char *input, char *output) {

...

output[i] = 0 ;
}

最后,可以通过将 i 声明为类型 size_t 来清除已签名的不匹配警告。

当然,在 Windows 上,如果你想要更现代的 C 支持,你总是可以使用 MinGW/GCC。或者,如果您想坚持使用 Microsoft 的编译器,则可以使用 C++ 和 std::stringstd::vector 容器。

关于c - 在 Visual Studio 中用 C 语言初始化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47894961/

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