未声明 snprintf 函数?
snprintf function not declared?
我正在尝试使用 snprintf
函数,该函数基于我已阅读的手册,是 <stdio.h>
header 的一部分,但是我收到一个错误消息被隐式声明。这是我的代码:
#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;
}
你好像用的是gcc
,但是这个编译器不一定使用符合C标准的glibc,支持snprintf
。
在 Windows 架构上,您可能正在使用 Microsoft C 库,它在旧版本中没有 snprintf
或重命名为 _snprintf
。
您可以通过以下 2 种方法尝试解决您的问题:
- 尝试使用
_snprintf
而不是 snprintf
。
在将 <stdio.h>
包含为
之后手动定义 snprintf
int snprintf(char *buf, size_t size, const char *fmt, ...);
编译器应该停止抱怨丢失的原型,如果运行时库确实有一个 snprintf
的符号和匹配的调用约定,它将 link 到它并且程序应该表现为预期。
我正在尝试使用 snprintf
函数,该函数基于我已阅读的手册,是 <stdio.h>
header 的一部分,但是我收到一个错误消息被隐式声明。这是我的代码:
#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;
}
你好像用的是gcc
,但是这个编译器不一定使用符合C标准的glibc,支持snprintf
。
在 Windows 架构上,您可能正在使用 Microsoft C 库,它在旧版本中没有 snprintf
或重命名为 _snprintf
。
您可以通过以下 2 种方法尝试解决您的问题:
- 尝试使用
_snprintf
而不是snprintf
。 在将
之后手动定义<stdio.h>
包含为snprintf
int snprintf(char *buf, size_t size, const char *fmt, ...);
编译器应该停止抱怨丢失的原型,如果运行时库确实有一个 snprintf
的符号和匹配的调用约定,它将 link 到它并且程序应该表现为预期。