#include <string.h>
#include <time.h>
#include <stdio.h>
static char* extensionSearch(char * fileName){
const char* extensions[] = {".exe", ".doc", ".xls", ".ppt", ".txt", ".jpg", ".eml", ".log"};
char * fName = fileName;
char* tmpRetValue = "";
char* finalRetValue = "noExt";
for(int i=0; i<sizeof(extensions)/sizeof(const char *); i ++)
{
tmpRetValue = strstr(fName, extensions[i]);
if(strcmp(tmpRetValue, extensions[i]) == 0)
{
finalRetValue = extensions[i];
}
}
return finalRetValue;
}
int main () {
char* fileExt = extensionSearch("great.exe");
}
这是一个自制的C函数。我叫
这会导致分段错误。 发生段错误的原因是strstr()返回NULL,但是当我阅读文档“ https://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm”时,它从不返回NULL。为什么它返回NULL?
该函数获取文件名,并检查它是否在函数中具有这些扩展名之一。如果有,则返回文件扩展名。
答案 0 :(得分:1)
问题最有可能在这里
printf("%s\n", *fileName);
变量fileName
是指向char
的指针。仅使用"%s"
格式打印字符串时所需的类型。但是,您取消引用了指针,这导致将字符串中的第一个字符传递为"%s"
格式。表达式*fileName
与fileName[0]
相同。这是一个char
元素。
格式说明符和参数不匹配会导致undefined behavior,这是导致像您这样的崩溃的常见原因。
答案 1 :(得分:1)
您必须检查@click
调用的返回值。如果strstr
返回NULL,则不能将其传递给strstr
。您需要做例如
strcmp