编辑:如何保存第一个字符串,然后使用strcat func
void *threads_sorting (void *arg) {
struct args_sort *mydata;
mydata = (struct args_sort *) arg;
FILE *forig
char *file_name;
//file_name = (char*)malloc( sizeof(char) * 10 );
file_name = mydata->fname;
printf ("File Name: %s\n", file_name);
char *final_name;
//final_name = (char*)malloc( sizeof(char) * 20 );
final_name = file_name;
final_name = strcat(final_name, ".sorted");
printf ("File Name: %s\n", file_name);
printf ("FInal Name: %s\n", final_name);
forig = fopen(file_name,"r");
if(forig==NULL)
{
printf("Unable to open file\n");
exit(1);
}
}//end of function
现在输出是:
File Name: arch1.txt
File Name: arch1.txt.sorted //that's why it doesn't open
Final Name: arch1.txt.sorted
Unable to open file
问题是如何保存第一个字符串,然后使用strcat,我的不好。
答案 0 :(得分:2)
省略整个malloc()代码。您的代码不仅会泄漏内存,而且变量也不会保留您的文件名。
这应该有效:
forig = fopen(mydata->fname,"r");
答案 1 :(得分:1)
检查errno
以了解失败的原因。有关可能的值,请参阅fopen(3)
,open(2)
和malloc(3)
手册页。
答案 2 :(得分:1)
这不是错误的原因,但是这段代码不符合你的想法:
char *file_name;
file_name = (char*)malloc( sizeof(char) * 10 );
file_name = mydata->fname;
答案 3 :(得分:1)
strcat()不分配新字符串,它将第二个“.sorted”字符串追加到第一个字符串。 strcat()的返回值将与第一个字符串参数的字符串指针相同。你对strcat()的使用最有可能是通过写入超出mydata-> fname的结尾来破坏内存。
有关如何为final_file分配新字符串的示例,请参阅下面的代码。
#define FILE_SORTED_EXT ".sorted"
void *threads_sorting (void *arg) {
struct args_sort *mydata;
mydata = (struct args_sort *) arg;
FILE *forig
char *file_name;
char *final_name;
file_name = mydata->fname;
printf ("File Name: %s\n", file_name);
// Allocate space for "sorted" file_name.
final_name = malloc(strlen(file_name) + strlen(FILE_SORTED_EXT) + 1);
// append .sorted extentsion to file name.
strcpy(final_name, file_name);
strcat(final_name, FILE_SORTED_EXT);
printf ("File Name: %s\n", file_name);
printf ("FInal Name: %s\n", final_name);
forig = fopen(file_name,"r");
if(forig==NULL)
{
free(final_name); // make sure to cleanup allocated memory.
perror("threads_sorting(): Unable to open file\n");
exit(1);
}
// TODO: do something with forig FD and final_name.
free(final_name); // make sure to cleanup allocated memory.
}//end of function
答案 4 :(得分:0)
确保您尝试打开的文件位于当前工作目录中。如果您使用文件的完整路径会发生什么?