0

I am trying to read from keyboard (using scanf) the variable char *path I don't know how to pass the path as argument of scanf to get the input from keyboard. How can I do it?

P.S. This is what I have tried:

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

But my application always stops.

4

4 回答 4

2
char *filePath = "";

编译器应该已经警告您上述声明。filePath类型 isconst char*和 not char*

filePath指向一个空字符串文字。字符串文字位于只读位置,您无法编辑它们。

您必须分配和使用内存malloc,然后输入。一旦你完成了,你需要free它。

于 2013-08-03T15:59:01.133 回答
1
char *filePath = "";

声明一个指向仅包含 nul 终止符的字符串文字的指针。这可能存在于只读内存中,因此无法修改。您需要一个更大的可写字符串

char filePath[200];
if (scanf("%199s", filePath) != 1) {
    /* user didn't enter a string */
}
于 2013-08-03T15:58:02.597 回答
1

首先为 分配足够的空间filePath,然后在没有的情况下传递它&

char filePath[128];
printf("Path: ");
scanf("%127s", filePath);

另一种方法是使用malloc

char *filePath = (char*) malloc(128 * sizeof(char));
...
free(filePath);
于 2013-08-03T15:58:30.637 回答
1

scanf 方法总是使用对您正在写入的变量的引用(因此通过非指针变量,您使用 & 来获取引用(内存地址))。由于您使用的是指针,因此指针本身已经是对变量的引用,它指向变量的内存地址,因此不需要 & 用法。

只要确保始终为输入字符串分配足够的空间。(ANSI)C 方法是使用 malloc(),较新的(C++ 和更高版本的 C 标准)是使用new arrayname[size].

于 2013-08-03T16:28:08.173 回答