使用 isdigit() 和 argc 时 C 中的分段错误
Segmentation fault in C while using isdigit() and argc
我遇到以下问题:分段错误(核心已转储)。
我查看了 Whosebug 上的其他问题,但没有看到我的问题的正确答案。这是我的代码:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("missing command-line argument\n");
return 1;
}
for (int i = 0; i < argc; i++)
{
printf("Made it inside");
if (isdigit(argv[i]) == 0)
{
return 1;
}
}
string plain_text = get_string("plaintext: ");
int key = atoi(argv[1]); //function to convert a string to int.
for (int i = 0, n = strlen(plain_text); i < n; i++)
{
int c = (int) plain_text[i];
c += key;
printf("%c", c);
}
printf("\n");
return 0;
}
错误来自 "if (isdigit(argv[i]) == 0)"。
编辑:
解决方法在此,谢谢大家!
for (int i = 0; i < strlen(argv[1]); i++)
{
if (isdigit(argv[1][i]) == 0)
{
return 1;
}
}
isdigit 需要一个 int,你给它一个字符串(实际上是一个以 null 结尾的字符组)
http://pubs.opengroup.org/onlinepubs/009696699/functions/isdigit.html
虽然在这种情况下行为被列为 "undefined",但我实际上不确定为什么您会从中得到段错误。
您传递的 string
实际上是 char *
到 isdigit
。您需要改为传递字符串的第一个字符
isdigit(*argv[i][0])
我遇到以下问题:分段错误(核心已转储)。
我查看了 Whosebug 上的其他问题,但没有看到我的问题的正确答案。这是我的代码:
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("missing command-line argument\n");
return 1;
}
for (int i = 0; i < argc; i++)
{
printf("Made it inside");
if (isdigit(argv[i]) == 0)
{
return 1;
}
}
string plain_text = get_string("plaintext: ");
int key = atoi(argv[1]); //function to convert a string to int.
for (int i = 0, n = strlen(plain_text); i < n; i++)
{
int c = (int) plain_text[i];
c += key;
printf("%c", c);
}
printf("\n");
return 0;
}
错误来自 "if (isdigit(argv[i]) == 0)"。
编辑:
解决方法在此,谢谢大家!
for (int i = 0; i < strlen(argv[1]); i++)
{
if (isdigit(argv[1][i]) == 0)
{
return 1;
}
}
isdigit 需要一个 int,你给它一个字符串(实际上是一个以 null 结尾的字符组)
http://pubs.opengroup.org/onlinepubs/009696699/functions/isdigit.html
虽然在这种情况下行为被列为 "undefined",但我实际上不确定为什么您会从中得到段错误。
您传递的 string
实际上是 char *
到 isdigit
。您需要改为传递字符串的第一个字符
isdigit(*argv[i][0])