C 语言指针赋值的问题,先谢谢各位了。
背景:我在做一个文件字符串替换的小程序,用户要替换文件中一个数据,这个数据很大,也可以是不确定。
这个时候,我用了一个指针ptr来存放用户输入的数据,通过函数scanf(),将用户输入的值存入ptr;
问题是:我如何给ptr初始化,如果我用“char ptr[100]”初始化ptr,那么,当用户输入数据大于100 的时候,肯定就出错了。即使将100换到1000,用户输入数据也可能大于1000;
所以,我该怎么初始化呢?
我的另一个思路就是使用ptr指针,这个时候,还是有问题,怎么初始化这个ptr?
我尝试用char *ptr=NULL,这个时候报错了,可是如果不给他这个NULL值,肯定更会报错,这个时候,我要怎么给ptr初始化呢?
结尾处:先谢谢各位了。在线等。 C 指针 初始化
[解决办法]
指针是无法保存实际内容的,它只能指向一个可用的内存空间,保存数据的实际是那个空间,如果只是定义一个指针是不行的,所以char *ptr;是不行的没有初始化为NULL,更是会出错,因为不知道ptr指向哪块内存,如果乱写可能破坏系统的数据导致崩溃。
可以使用malloc来根据输入的大小来分配空间,
比如
unsigned int nSize;
printf("请输入字符串的大小:"); // 让用户先定下来大小
scanf("%u" ,&nSize); // 取得大小,保存到变量nSize中
if(nSize > 0)
{
char *ptr = (char*) malloc(nSize*sizeof(char));
... // 你自己的操作
free(ptr); // 释放动态分配的空间
ptr = NULL; // 最好将指针置NULL
}
int ch = 0;
int init_size = 128;
int cur_index = 0;
int cur_size = init_size;
char *input = (char *)malloc(cur_size);
while((ch=fgetc(stdin)))
{
if(ch == '\r'
[解决办法]
ch=='\n')
{
break;//input finished
}
if(cur_index >= cur_size)//current memory is not enough,realloc memory
{
cur_size *= 2;
input = realloc(input,cur_size);
if(NULL == input)
{
perror("realloc error");
}
}
input[cur_index++] = ch;
}
input[cur_index] = '\0';