我是 C 编程的新手,我已经考虑这个问题很长一段时间了:
char* name;
scanf("%s", name);
为什么这不起作用?例如,如果我输入“Hello”,程序只会给我一个错误。但是上面的代码不是和这个完全一样吗?
char* name = "Hello";
char* name;
声明一个指针,但没有将其初始化为指向您分配的内存。尝试使用scanf
导致未定义的行为并可能会崩溃。
char* name = "Hello";
声明一个指针并将其初始化为指向一个字符串文字。字符串文字可能存储在只读内存中,因此您应该将其视为具有 type const char*
。
因此,如果您想在运行时分配一个字符串,这些方法都不起作用。相反,您必须为char
数组分配内存,然后使用scanf
(或fgets
,readline
等)将字符串写入该内存
char name[20];
scanf("%19s", name);
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);