当我将字符串声明为:char aString [SIZE * 2 + 1];?时发生了什么

时间:2018-05-12 14:05:07

标签: string

我正在研究一个程序的示例,该程序采用用户输入,以字符串形式存储然后以大写或小写打印两次出现的反义字符。例如,输入ABCdef将打印aabbccDDEEFF。

我对新字符串的声明方式有点困惑,任何人都可以帮助解释发生了什么。

char string[MAX_STRING_SIZE+1];      // MAX_STRING_SIZE is defined as 500 and +1 is for the NULL char to terminate string 
char stringNew[MAX_STRING_SIZE*2+1]; // Here I do not understand *2+1
编辑:在我发布这个问题之后,我想出了答案,并意识到它可能对堆栈溢出社区没有用,但由于问题已经得到解答,删除它会很粗鲁。

如果其他成员对此特定问题感兴趣,我试图通过编辑问题标题并总结答案来使其变得有用。

由于此程序将从用户输入中打印出每个字符的两次出现,因此新字符串的大小必须是原始字符串的两倍。通过用* 2声明新的字符串大小,您只需将大小乘以2,从而使大小加倍。

事后看来非常简单,我希望这对其他人有用。

1 个答案:

答案 0 :(得分:1)

该声明中没有涉及指针。您只是声明另一个char的数组,其大小是第一个数组的两倍+将存储\0的额外字节。

它不能是指针,因为方括号之间没有标识符。在预处理器完成源文件的工作后,该表达式实际上将成为char stringNew[500*2+1];