【发布时间】:2018-11-29 06:40:31
【问题描述】:
#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?
函数获取一个文件名并检查它是否在函数中具有这些扩展名之一。如果有,则返回文件扩展名。
【问题讨论】:
-
在哪一行? (是的,你应该自己找出来。)
-
错误是什么,发生在哪里?
-
printf("%s\n", *fileName);已经错误,*fileName返回char,但%s期望char* -
正如@UnholySheep 所说。改为
printf("%s\n", fileName) -
此外,tutorialspoint 不是 文档。我不会考虑将它用作 a 文档。
标签: c function parameters segmentation-fault