3

我是 C 编程的新手,我已经考虑这个问题很长一段时间了:

char* name;
scanf("%s", name);

为什么这不起作用?例如,如果我输入“Hello”,程序只会给我一个错误。但是上面的代码不是和这个完全一样吗?

char* name = "Hello";
4

2 回答 2

8
char* name;

声明一个指针,但没有将其初始化为指向您分配的内存。尝试使用scanf导致未定义的行为并可能会崩溃。

char* name = "Hello";

声明一个指针并将其初始化为指向一个字符串文字。字符串文字可能存储在只读内存中,因此您应该将其视为具有 type const char*

因此,如果您想在运行时分配一个字符串,这些方法都不起作用。相反,您必须为char数组分配内存,然后使用scanf(或fgetsreadline等)将字符串写入该内存

char name[20];
scanf("%19s", name);
于 2013-08-21T21:26:49.983 回答
2
If you don't know the size of array before runtime , maybe you need a malloc
char* name = malloc(N); // you should initialize just N before use it.
scanf("%s", name);// It can work now , however it may case a overflow if you type too mach ,more than N-1

或者你可以使用

int n; 
if(( n = read(STDIN_FILENO,name,N)) <0)
{printf("read error"); return -1;}
name[n]  = 0; 

或者

fgets(name,N,stdin) ;

另外,使用后记得释放内存

free(name);
于 2013-08-21T21:32:35.117 回答