我的代码出了点问题
Something went wrong with my code
我正在尝试一些东西,但程序会崩溃并出现此错误:分段错误:11
有人有解决方案吗?
char str1[20]
printf("Enter Data: ");
scanf("%s", &str1);
printf("Entered Data: %s\n", str1);
int ex = strtod(str1, sizeof(str1));
printf("%s\n", ex);
if (ex == "1")
{
printf("1 Detected");
}
.. 如果提供了 1,它不会检测到数字 1..
主要问题在这三行:
int ex = strtod(str1, sizeof(str1));
printf("%s\n", ex);
if (ex == "1")
首先将字符串转换为 double
值,然后将其转换为整数。没关系,但如果你想要一个整数值,你可能应该使用 strtol
。
然而,第二行和第三行有很大缺陷。在第二行中,您将整数视为 指针 ,即指向字符 a.k.a 的指针。一个字符串。整数值不是指针,将其视为字符串会导致 未定义的行为,并且您可能会在此处发生崩溃。
然后第三行,从技术上讲它不是无效的,但它永远不会是真的,因为你将整数变量的值与指向字符串的指针进行比较,它们相等的可能性很小 none.
为了正确的(据我所知)行为尝试这样的事情
int ex;
scanf("%d", &ex); // Read an integer directly into the variablke
printf("%d\n", ex); // Print the integer as an integer
if (ex == 1) // Compare the integer variable to an integer literal
{
...
}
这里有几个问题。
这个:
scanf("%s", &str1);
应该是:
scanf("%s", str1);
%s
格式说明符需要 char *
,但您传递给它的是 char **
。
然后是这个:
int ex = strtod(str1, sizeof(str1));
strtod
函数需要一个 char **
作为第二个参数,它是 char *
的地址,它将指向第一个无法解析为双精度的字符。此外,您将结果 (a double
) 分配给 int
.
您可能想改用类似的函数 strtol
,它用于解析整数:
int ex = strtol(str1, NULL, 10);
这也是不正确的:
printf("%s\n", ex);
与 scanf
一样,printf
中的 %s
需要 char *
,而不是 int
。请改用 %d
。这是崩溃的最可能原因。
最后是这个:
if (ex == "1")
这不是执行整数比较的方式。您是将 ex
与字符串常量的地址进行比较。改为这样做:
if (ex == 1)
首先,在你的代码中,
printf("%s\n", ex);
应该是
printf("%d\n", ex);
那么,ex
是 int
,
if (ex == "1")
应该是
if (ex == 1)
我正在尝试一些东西,但程序会崩溃并出现此错误:分段错误:11 有人有解决方案吗?
char str1[20]
printf("Enter Data: ");
scanf("%s", &str1);
printf("Entered Data: %s\n", str1);
int ex = strtod(str1, sizeof(str1));
printf("%s\n", ex);
if (ex == "1")
{
printf("1 Detected");
}
.. 如果提供了 1,它不会检测到数字 1..
主要问题在这三行:
int ex = strtod(str1, sizeof(str1));
printf("%s\n", ex);
if (ex == "1")
首先将字符串转换为 double
值,然后将其转换为整数。没关系,但如果你想要一个整数值,你可能应该使用 strtol
。
然而,第二行和第三行有很大缺陷。在第二行中,您将整数视为 指针 ,即指向字符 a.k.a 的指针。一个字符串。整数值不是指针,将其视为字符串会导致 未定义的行为,并且您可能会在此处发生崩溃。
然后第三行,从技术上讲它不是无效的,但它永远不会是真的,因为你将整数变量的值与指向字符串的指针进行比较,它们相等的可能性很小 none.
为了正确的(据我所知)行为尝试这样的事情
int ex;
scanf("%d", &ex); // Read an integer directly into the variablke
printf("%d\n", ex); // Print the integer as an integer
if (ex == 1) // Compare the integer variable to an integer literal
{
...
}
这里有几个问题。
这个:
scanf("%s", &str1);
应该是:
scanf("%s", str1);
%s
格式说明符需要 char *
,但您传递给它的是 char **
。
然后是这个:
int ex = strtod(str1, sizeof(str1));
strtod
函数需要一个 char **
作为第二个参数,它是 char *
的地址,它将指向第一个无法解析为双精度的字符。此外,您将结果 (a double
) 分配给 int
.
您可能想改用类似的函数 strtol
,它用于解析整数:
int ex = strtol(str1, NULL, 10);
这也是不正确的:
printf("%s\n", ex);
与 scanf
一样,printf
中的 %s
需要 char *
,而不是 int
。请改用 %d
。这是崩溃的最可能原因。
最后是这个:
if (ex == "1")
这不是执行整数比较的方式。您是将 ex
与字符串常量的地址进行比较。改为这样做:
if (ex == 1)
首先,在你的代码中,
printf("%s\n", ex);
应该是
printf("%d\n", ex);
那么,ex
是 int
,
if (ex == "1")
应该是
if (ex == 1)