【发布时间】:2016-01-11 12:32:53
【问题描述】:
#define _CRT_SECURE_NO_WARNINGS
#include "header.h"
void main() {
int input;
FILE* of = NULL;
FILE* rf = NULL;
char* ptr = NULL;
while (1) {
printf("1.writeFile\n2.ReadFile\n3.removeFile\n4.exit\n>>");
scanf("%d", &input);
switch (input) {
case 1:
makeFile(of, ptr);
break;
case 2:
readFile(rf);
break;
case 3:
deleteFile();
break;
case 4:
exit(1);
}
}
}
void makeFile(FILE* of, char* ptr) {
char name[10];
char str[50];
printf("Input file name >>");
scanf("%s", &name);
ptr = &name;
of = fopen(name, "w");
printf("FileName>> %s\n", *ptr);
printf("input text >>");
scanf("%s", str);
fputs(str, of);
}
我写的时候
(printf("FileName>> %s\n", *ptr);
我认为它会起作用,因为我将char name[50]的地址放入指针值,但是它不起作用。
所以我将代码更改为
printf("FileName>> %s\n", ptr);
而且效果很好,但我不明白其中的逻辑。
【问题讨论】:
-
指针是地址。 printf/scanf 需要一个有效的内存地址。所以传一个给它,就这么简单。
scanf("%s", &name);之类的东西不起作用,因为它意味着“给出存储指针本身的地址,然后尝试在那里存储整个字符串”。 -
除了答案之外,
ptr = &name;只是改变了makeFile函数内部的局部参数的值。它确实不更改从main传递的ptr的值。即使这样,&name的值在返回到main时也将不再有效。
标签: c pointers printf format-specifiers