我有一个 c 函数,我想返回一个字符串。
如果我在返回之前打印字符串,那么我会看到 croc_data_0186.idx
如果我尝试打印返回的字符串,我会看到 croc_data_á☼
谁能看出我做错了什么?
问题函数:
char* getSegmentFileName(FILE *file, int lineLength, int lineNumber)
{
char* fileNameString;
fseek(file, lineNumber * lineLength, SEEK_SET);
char line[lineLength];
fgets(line, lineLength, file);
char *lineElements[3];
lineElements[0] = strtok(line, ":");
lineElements[1] = strtok(NULL, ":");
lineElements[2] = strtok(NULL, ":");
fileNameString = lineElements[2];
printf ("getSegmentFileName fileNameString is: %s \r\n", fileNameString);
return fileNameString;
}
调用代码:
int indexSearch(FILE *file, char* value, int low, int high, char* segmentFileName)
{
...
segmentFileName = getSegmentFileName(file, lineLength, mid);
printf ("indexSearch: segmentFilename3 is: %s \r\n", segmentFileName);
...
}
最佳答案
您返回的是指向本地数据的指针,该指针在函数返回后无效。您必须正确分配字符串。
这可以在调用函数中完成,方法是向被调用函数提供一个缓冲区,并将字符串复制到提供的缓冲区。像这样:
char segmentFileName[SOME_SIZE];
getSegmentFileName(file, lineLength, mid, segmentFileName);
和getSegmentFileName
函数:
void getSegmentFileName(FILE *file, int lineLength, int lineNumber, char *segmentFileName)
{
/* ... */
strcpy(segmentFileName, fileNameString);
}
另一种解决方案是为getSegmentFileName
中的字符串分配内存:
return strdup(fileNameString);
但是你必须记住稍后释放
字符串。
关于c - 从 C 中的函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378998/