【发布时间】:2017-08-10 06:09:03
【问题描述】:
我发现我的小写字符串的基本代码有时会输出一个额外的字符。如果我使用一些输入运行 vigenere,它可以正常工作:
~/workspace/pset2/vigenere/ $ ./vigenere tweedDLed
tweeddled
但对于其他输入,它会在末尾插入一个额外的字符:
~/workspace/pset2/vigenere/ $ ./vigenere tweedDLedf
tweeddledfB
或者...
~/workspace/pset2/vigenere/ $ ./vigenere bkls33bf
bkls33bfW
这里发生了什么?由于未显示字符数组,因此我在调试器中找不到任何内容。这是我的代码:
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <cs50.h>
int main(int argc, string argv[]){
if (argc!=2){
return 1;
}
else{
int n = strlen(argv[1]);
char cipherKey[n];
for (int i=0;i<n;i++){
cipherKey[i]=tolower(argv[1][i]);
}
printf("%s\n",cipherKey);
}
}
【问题讨论】:
-
printf("%s\n",cipherKey);-->printf("%.*s\n", n, cipherKey); -
字符串以零结束比较好。否则我真的很惊讶你只打印了一封信:)