【发布时间】:2021-07-10 06:01:59
【问题描述】:
我正在参加 CS 入门课程 (CS50x),但遇到了一个小问题。
当只有argc[1] 时,为什么这段 C 代码会产生分段错误?
它应该打印语句。为什么不打印错误?
提前致谢!
int main(int argc, string argv[])
{
//HOUSEKEEPING
//Get/Validate Key
string key = argv[1];
int finalKey = atoi(key) % 26;
while (argc != 2)
{
for (int i = 0; i < strlen(key); i++)
if (!isdigit(key[i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
else
{
printf("Usage: ./caesar key\n");
return 1;
}
//...
【问题讨论】:
-
在访问
argv[1]之前需要检查是否argc == 2。 -
此外
while (argc != 2)是无稽之谈,因为argc不会改变。这里不需要循环 -
请缩进你的程序。
-
你没有通过凯撒键。对于 1 (a --> b, b-->c, ...) 的凯撒键,您可以通过
./caesar 1运行您的程序。 -
@i486 这是 CS50 BS。他们使用
typedef char* string让学生有点相信C 中有string类型。
标签: c command-line-arguments cs50 argv argc