Scanf for char *路径

时间:2013-08-03 15:55:34

标签: c scanf

我正在尝试从键盘(使用scanf)读取变量char *path 我不知道如何传递path作为scanf的参数来获取键盘的输入。我该怎么办?

P.S。这就是我的尝试:

char *filePath = "";
printf("Path: "); scanf("%s", &filePath);

但我的申请总是停止。

4 个答案:

答案 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]创建数组。