如何先从键盘读入一串字符串,再赋给指针

来源:百度知道 编辑:UC知道 时间:2024/05/22 07:34:13
利用char *p;
p="abc";
是先将abc\0保存到内存,再将首地址赋予指针p

但是如果先从键盘中读入字符串,比如用gets(p);则是把这串字符保存到p指定的地址去,就会因为p所指定的地址不可知而变得很危险。

先定义数组比如 char a[100];
p=a;gets(p);
这样就可以先把p指定好了。可是就会因为开一个足够大的内存而占用了多余的空间。

我的问题就是,怎么样先从键盘读入一串字符串,然后把它存到内存中去,再将地址赋给p,而不是存到p的地址中去

先用一个临时变量temp保存读入的字符串,再根据字符串的长度分配一个新的内存空间,如下:
char *p=(char*)malloc(sizeof(temp));
再将temp的内容拷贝到p中;
strcpy(p,temp);
最后释放temp;

要动态的,那就用链表吧,一个字符一个字符的读,然后再动态分配个数组,把字符拷进去。

也可以先存到q指向的内存中,然后把p指向q,但这和直接存到p指向的内存中一样的。

其他的没有很好的方法。

你这么做本身就是非法的,试想如果你直接读入内存,会造成未知的后果。很多漏洞就是如此的。