以下代码应该接受用户输入并将其写入文件。
int main(int argc, char* argv[]) {
FILE* fp;
char string[512]; //maximum it should ever be
char first[19];
char last[19];
char grade[4];
char choice[7];
if(argc == 2)
fp = fopen (strcat(argv[1],".txt"), "wb+");
while(fgets(string, 512, stdin) != NULL) {
sscanf(string, "%s", choice);
if(strcmp(choice, "add") == 0) {
printf("%s\n", string); //print out what string is
if(sscanf(string, "%s %s %s %s", choice, first, last, grade) == 4) {
printf("%s\n", choice);
printf("%s\n", first);
printf("%s\n", last);
printf("%s\n", grade);
addData(first, last, grade, fp, 0);
}
}
作为测试我输入:添加测试测试器100
添加数据应该将信息放入文件中。
void addData(char first[], char last[], char grade[], FILE* fp) {
rewind(fp);
spaces(first, last, grade);
fprintf(fp, first);
fprintf(fp, last);
fprintf(fp, grade);
}
void spaces(char first[], char last[], char grade[]) {
size_t i;
for(i=strlen(first);i<20;i++)
first[i] = ' ';
for(i=strlen(last);i<20;i++)
last[i] = ' ';
for(i=strlen(grade);i<=4;i++)
grade[i] = ' ';
grade[strlen(grade)-1] = '\0'; }
当我添加到文件中时,我希望看到:
test tester 100
相反,我得到:
est dd test tester 1000 est dd test tester 100100 est dd test tester 100
在64位系统上,我当然得到了这个:
test tester 100
到底发生了什么,为什么要将一堆信息打印到我没有要求的文本文件中?我如何才能解决这个问题,以便在32位和64位系统上运行?
答案 0 :(得分:2)
fgets(string, 512, stdin) != NULL
你所拥有的是数组越界访问,因为数组字符串只能容纳44个字符,但你可以写超过44个字符。所以行为是未定义的。
fgets(string, sizeof(string), stdin) != NULL
是你应该拥有的
答案 1 :(得分:0)
正如WhozCraig所说,我的一些数组大小都错了。当我设置尺寸时,我没有考虑空间,所以空间超过我指定的尺寸。