【问题标题】:Why does this C code crash? [closed]为什么这个 C 代码会崩溃? [关闭]
【发布时间】:2016-03-17 18:15:53
【问题描述】:

谁能向我解释为什么这段代码经常崩溃。 我觉得一切都很好。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* find(char *haystack, char needle);
int main (){
    char haystack[400], needle;
    fgets(haystack,400,stdin);
    scanf("%c", needle);
    if(find(haystack,needle)) printf("%ld", find(haystack, needle) - haystack);
    else printf(NULL);
    return 0;
}
char* find(char *haystack, char needle) {
    int lewski, cska;
    lewski = strlen(haystack);
    if(strchr(haystack,needle)){
        cska = lewski-strlen(strchr(haystack,needle));
        return &haystack[cska];
    }
    return NULL;
}

【问题讨论】:

  • 您可以在调试器中运行并找出自己。
  • "为什么这个 C 代码会崩溃?" - 我会假设因为代码中存在编程错误。如果您告诉它崩溃的地点和时间,以及预期的行为,可能会更容易为您提供帮助。见How to Ask
  • 您想启用所有编译器警告,然后认真对待发出的警告并修复代码。
  • 同样strlen()返回size_t而不是int
  • 如果你的 C 实现支持使用长度修饰符 t 导致 "%td" 打印出指针差异。这样可以确保假定指针的正确宽度。

标签: c function pointers crash strchr


【解决方案1】:

在您的代码中,您没有正确使用scanf。 修改如下;

scanf("%c", &needle);

还有printf 不打印NULL 修改如下;

printf("NULL");

希望这会有所帮助。

【讨论】:

  • scanf("%c", &needle);否则 printf(-1);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多