我正在尝试从键盘(使用scanf
)读取变量char *path
我不知道如何传递path
作为scanf的参数来获取键盘的输入。我该怎么办?
P.S。这就是我的尝试:
char *filePath = "";
printf("Path: "); scanf("%s", &filePath);
但我的申请总是停止。
答案 0 :(得分:2)
char *filePath = "";
编译器应警告您上述声明。 filePath
类型为const char*
,而非char*
。
filePath
指向空字符串文字。字符串文字位于只读位置,您无法编辑它们。
您必须使用malloc
进行分配和记忆,然后输入。完成后,您需要free
。
答案 1 :(得分:1)
char *filePath = "";
声明一个指向字符串文字的指针,该字符串文字只包含一个空终止符。这可能存在于只读存储器中,因此无法修改。你需要一个更大的可写字符串
char filePath[200];
if (scanf("%199s", filePath) != 1) {
/* user didn't enter a string */
}
答案 2 :(得分:1)
首先为filePath
分配足够的空间,然后在没有&
的情况下传递它:
char filePath[128];
printf("Path: ");
scanf("%127s", filePath);
另一种方法是使用malloc
:
char *filePath = (char*) malloc(128 * sizeof(char));
...
free(filePath);
答案 3 :(得分:1)
scanf方法始终使用对您正在写入的变量的引用(因此,通过非指针变量,您使用&来获取引用(内存地址))。 由于您使用的是指针,指针本身已经是对变量的引用,它指向变量的内存地址,因此不需要&的使用。
确保始终为输入字符串分配足够的空间。
(ANSI)C方式是使用malloc(),较新的(C ++和更高版本的C标准)是使用new arrayname[size]
创建数组。