【发布时间】:2019-10-17 05:13:40
【问题描述】:
我想将数据存储在不同的文件中。因此我想创建如下文件:data_1.log,data_2.log,...,data_N.log。附录.log 不是必需的,但会很好。到目前为止,我所有的方法都失败了。这是一个可能接近我需要的示例:
#include <stdio.h>
#include <string.h>
char get_file_name(int k){
int i, j;
char s1[100] = "logs/data_";
char s2[100];
snprintf(s2, 100, "%d", k);
for(i = 0; s1[i] != '\0'; ++i);
for(j = 0; s2[j] != '\0'; ++j, ++i){
s1[i] = s2[j];
}
s1[i] = '\0';
return s1;
}
int main(){
char file_name[100];
for(int k=0; k<10; k++){
// Get data
// ...
// Create filename
strcpy(file_name, get_file_name(k));
printf("%s", file_name);
// fp = fopen(file_name, "w+");
// Write data to file
// print_results_to_file();
// fclose(fp);
}
return 0;
}
目前我收到以下我不明白的错误:
string.c: In function ‘get_file_name’:
string.c:14:12: warning: returning ‘char *’ from a function with return type ‘char’ makes integer from pointer without a cast [-Wint-conversion]
return s1;
^~
string.c:14:12: warning: function returns address of local variable [-Wreturn-local-addr]
string.c: In function ‘main’:
string.c:24:27: warning: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]
strcpy(file_name, get_file_name(k));
^~~~~~~~~~~~~~~~
In file included from string.c:2:
/usr/include/string.h:121:14: note: expected ‘const char * restrict’ but argument is of type ‘char’
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
^~~~~~
有没有更简单的方法来创建这样的文件名?我不敢相信没有。
【问题讨论】:
-
您的构建失败,因为您没有定义
print_results_to_file();方法。 -
第一个警告非常清楚:您返回一个 char* 而您的返回类型只是一个 char。但是,请注意第二个警告:您正在返回局部变量的地址!
-
你读过错误吗?
-
发布错误消息是一件好事,但您也应该阅读它们,尝试理解它们并用谷歌搜索它们。一个关于“函数返回局部变量地址”的简单谷歌会给你非常详细的错误解释。
标签: c string scope undefined-behavior