char *toParseStr = (char*)malloc(10);
printf("Enter string here: ");
scanf("%s",toParseStr);
printf("%s",toParseStr);
free(toParseStr);
首先,字符串在scanf
is 指定它将接收的输入。为了在接受键盘输入之前显示字符串,请使用printf
如图所示。
其次,您不需要取消引用toParseStr
因为它指向一个大小为 10 的字符数组,正如您分配的那样malloc
. If你正在使用一个将其指向另一个内存位置的函数,then &toParseStr
是必须的。
例如,假设您想编写一个函数来分配内存。那么你需要&toParseStr
因为您正在更改指针变量的内容(这是内存中的地址——您可以通过打印其内容来亲自查看)。
void AllocateString(char ** ptr_string, const int n)
{
*ptr_string = (char*)malloc(sizeof(char) * n);
}
正如你所看到的,它接受char ** ptr_string
它读取为一个指针,存储了一个指针的内存位置will存储内存地址(在malloc
操作)的已分配块的第一个字节n
字节(现在它有一些垃圾内存地址,因为它尚未初始化)。
int main(int argc, char *argv[])
{
char *toParseStr;
const int n = 10;
printf("Garbage: %p\n",toParseStr);
AllocateString(&toParseStr,n);
printf("Address of the first element of a contiguous array of %d bytes: %p\n",n,toParseStr);
printf("Enter string here: ");
scanf("%s",toParseStr);
printf("%s\n",toParseStr);
free(toParseStr);
return 0;
}
第三,建议释放您分配的内存。尽管这是您的整个程序,并且当程序退出时该内存将被释放,但这仍然是一个很好的做法。