我有两个字母数组,格式如下:
const char plain[26] = {'a','b',....'y','z'} // this is the the full alphabet
const char crypt[26] = {'i','d',....'m','x'}; // this is the the alphabet scrambled
两个数组中字母表的顺序可以根据输入而改变。此更改发生在主函数中。
这样做的目的是将字符串的字母与第二个匹配,就像加密一样。我将字符与数组值进行比较。所以它看起来像这样(简化)
text[3] = 'yes';
changed[3];
if(text[0] == plain[25]){ //would be done under a for loop so 25 would be a changing integer value
changed[0] = [crypt[25];
}
我的代码在主函数下完美运行。我想像这样提及我的目的,因为我以前只是因为数组类型和格式而遇到问题。由于阵列移到了外面,我可能/正在再次遇到这些问题。
现在我想使数组成为全局数组。实际的加密发生在一个不将数组作为变量的函数中。但我希望函数能够访问它们。
这是现在的样子
const char plain[26];
const char crypt[26];
int maint(void){
const char plain[26] = {'a','b',....'y','z'} \\values get changed here
const char crypt[26] = {'i','d',....'m','x'} \\and here
虽然这没有错误,但我没有得到输出,我相信其他函数使用的是空白数组而不是更改后的数组(如果更改有效的话)。
我尝试了不同的数组类型,我认为问题在于初始化或给数组值。
编辑:澄清一下,这两个数组可以按任何顺序排列。一个文本文件将随机化顺序,可以按以下格式给我:
b,r
m,o
l,s
...
...
...
两种情况下字母表都是随机的。第一列对应于第一个数组(普通),第二列对应于第二个数组(crypt)。
如果有办法按列读取并按格式存储
plain = 'bml...'; \\whole alphabet randomized
crypt = 'ros...'; \\whole alphabet randomized
那也行。
最佳答案
main
中的plain
和crypt
与全局的不同。由于您再次声明它们,它们是新的,仅在 main
中可见。因此,您不会更改全局的。
相反,仅在全局范围内声明它们一次并在 main
函数中进行赋值:
char plain[26];
int main(void) {
memcpy(plain, "abcdefghijklmnopqrstuvwxyz", 26); //values get changed here
return 0; // indicate successful program execution
}
另请注意,其中存在一些语法错误
const char plain[26] = {'a','b',....'y','z'} \\values get changed here
注释以//
开头,而不是\\
,并且你需要在语句后加一个;
。此外,int main
应该在 C 中返回一个 int
。
当然,如果你不需要实际改变内存而只是将它分配给预定义的字符集,你可以这样做:
const char *plain;
int main(void) {
plain = "abcdefghijklmnopqrstuvwxyz";
return 0;
}
这样你仍然可以使用像 plain[5]
这样的语法来读取它,但是你不能给它赋值,比如说 plain[5] = 'a';
.
关于c - 将 main 中的数组转换为全局数组,稍后由 main 更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54587576/