【发布时间】: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