我正在尝试使用字母'相应的ASCII代码构建两个字符串数组 - 一个使用小写字母,一个使用大写。
char lc['z' - 'a'];
for(int i = 'a'; i <= 'z'; i++ ) {
lc[i - 'a'] = i ;
}
printf("%s", lc);
char uc['Z' - 'A'];
for(int i = 'A'; i <= 'Z'; i++ ) {
uc[i - 'A'] = i ;
}
printf("\n%s", uc);
我得到的输出是正确的,除了对于两个表,最后有一个额外的@符号,我不知道为什么。如果我将循环条件改为i&lt; 'Z'相反,它切断了z / Z,而不是@,所以我怀疑它可能与'\ 0'符号结束字符串数组有关?
答案 0 :(得分:4)
你的怀疑是正确的:你需要用&#39; \ 0&#39;来结束。因为sh """
version='1.2.3.4'
IFS=. read a b c d <<EOF
\$version
EOF
echo \"a\" \$a
"""
(以及C中几乎所有其他字符串处理函数)都希望它们像这样。此外,您还需要在整个字母表的数组中再添加一个元素。你的代码应该是:
printf
如果您想知道&#39; @&#39;数组之后的内存可能只是一个随机值,因为它还没有到达&#39; \ 0&#39; char lc['z' - 'a' + 2];
for(int i = 'a'; i <= 'z'; i++ ) {
lc[i - 'a'] = i ;
}
lc['z' - 'a' + 1] = '\0';
printf("%s", lc);
char uc['Z' - 'A' + 2];
for(int i = 'A'; i <= 'Z'; i++ ) {
uc[i - 'A'] = i ;
}
uc['Z' - 'A' + 1] = '\0';
printf("\n%s", uc);
继续打印。