我正在尝试一些东西,但程序会因此错误而崩溃:分段错误: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 ..
答案 0 :(得分:2)
主要问题在于以下三个方面:
int ex = strtod(str1, sizeof(str1));
printf("%s\n", ex);
if (ex == "1")
首先将字符串转换为double
值,然后将其转换为整数。没关系,但如果你想要一个整数值,你可能应该使用strtol
。
然后第三行,它在技术上无效,但它永远不会是真的,因为你将整数变量的值与一个字符串的指针进行比较,它们相等的几率很小甚至没有。
为了正确(据我所知)行为尝试这样的事情
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
{
...
}
答案 1 :(得分:1)
这里有几个问题。
此:
scanf("%s", &str1);
应该是:
scanf("%s", str1);
%s
格式说明符需要char *
,但您传递char **
。
然后就是这样:
int ex = strtod(str1, sizeof(str1));
strtod
函数需要char **
作为第二个参数,这是char *
的地址,它将指向第一个无法解析为double的字符。此外,您还要将结果(double
)分配给int
。
您可能希望使用类似的函数strtol
来代替解析整数:
int ex = strtol(str1, NULL, 10);
这也是错误的:
printf("%s\n", ex);
与scanf
一样,%s
中的printf
需要char *
,而不是int
。请改用%d
。这是造成事故的最可能原因。
终于有了这个:
if (ex == "1")
那不是你如何进行整数比较。您反而将ex
与字符串常量的地址进行比较。这样做:
if (ex == 1)
答案 2 :(得分:0)
首先,在您的代码中,
printf("%s\n", ex);
应该是
printf("%d\n", ex);
然后,ex
为int
,
if (ex == "1")
应该是
if (ex == 1)