我正在尝试使用snprintf
函数,该函数基于我读过的手册是<stdio.h>
标题的一部分但是我收到一个错误,它已被隐式声明。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct users {
char* user_id;
};
typedef struct users users_t;
int save_user_detail(user_t);
int main() {
users_t users;
save_user_detail(users);
return 0;
}
int save_user_detail(users_t users)
{
printf("Type the filename = ");
scanf("%s", users.user_id);
char* extension = ".txt";
char fileSpec[strlen(users.user_id)+strlen(extension)+1];
FILE *file;
snprintf(fileSpec, sizeof(fileSpec), "%s%s", users.user_id, extension);
file = fopen(fileSpec, "w");
if(file==NULL)
{
printf("Error: can't open file.\n");
return 1;
}
else
{
printf("File written successfully.\n");
fprintf(file, "WORKS!\r\n");
}
fclose(file);
return 0;
}
答案 0 :(得分:4)
您似乎正在使用gcc
,但此编译器不一定使用glibc,它符合C标准并支持snprintf
。
在Windows体系结构中,您可能正在使用Microsoft C库,在旧版本中没有snprintf
或将其重命名为_snprintf
。
以下两种方法可以解决您的问题:
_snprintf
代替snprintf
。在将snprintf
包括为
<stdio.h>
int snprintf(char *buf, size_t size, const char *fmt, ...);
编译器应该停止抱怨丢失的原型,如果运行时库的snprintf
符号具有匹配的调用约定,它将链接到它并且程序应该按预期运行。