C:错误从字符串名称
问题描述:
编辑打开文件:我怎样才能挽救第一个字符串,然后使用strcat的FUNCC:错误从字符串名称
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,我的不好。
答
的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
+0
感谢Neo现在,这是一个明确的代码! – g0d1anier 2010-10-31 06:53:49
答
检查errno
以获得失败的原因。请参阅fopen(3)
,open(2)
和malloc(3)
手册页以了解可能的值。
答
确保您尝试打开的文件位于当前工作目录中。如果使用文件的完整路径会发生什么?
答
这不是错误的原因,但是这个代码没有做什么你认为它的作用:
char *file_name;
file_name = (char*)malloc(sizeof(char) * 10);
file_name = mydata->fname;
在NULL检查中做一个'perror(“fopen”);'' – BobbyShaftoe 2010-10-31 05:33:32