繁体   English   中英

我的代码出了点问题

[英]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

然而,第二行和第三行是非常有缺陷的。 在第二行中,您将整数视为指针,即指向字符的指针,也就是字符串。 整数值不是指针,将其视为字符串会导致未定义行为,并且可能在这里您遇到了崩溃。

然后第三行,它在技术上不是无效的,但它永远不会是真的,因为您将整数变量的值与指向字符串的指针进行比较,并且它们相等的机会很小甚至没有。


对于正确的(据我所知)行为,请尝试这样的操作

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 *的地址,它将指向第一个未能解析为双精度的字符。 此外,您将结果(一个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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM