c - 将 main 中的数组转换为全局数组,稍后由 main 更改?

标签 c arrays global-variables

我有两个字母数组,格式如下:

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 中的plaincrypt 与全局的不同。由于您再次声明它们,它们是新的,仅在 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/

相关文章:

c - 使用+2.000.000.000长数组时,我的代码崩溃。如何解决此段错误?

php - 按逗号和合并间隔将排序的数字数组内爆为字符串

c - 如何减少c程序中全局变量带来的依赖

c++ - 全局变量,c++

ios - 我可以在哪里存储我的Web服务器URL?

C中令人困惑的指针

c - 用于计算编号的代码错误。顾客提供钞票购买的糖果数量

c - 如何理解 "((size_t) &((TYPE *)0)->MEMBER)"?

JavaScript:根据 "outside"参数对数组进行排序

c++ - 战舰概率网格