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
}
[解决办法]
先声明为指针类型:
char* ptr = NULL;
用的时候动态分配内存:
size = 100;
ptr = (char*)malloc(size * sizeof(char));
不用的时候释放它:
if(ptr != NULL)
{
free(ptr);
ptr = NULL;
}
[解决办法]
一个静态buffer专门读入数据, 另外一个buffer慢慢realloc出来就可以了.
[解决办法]
这种情况需要自己处理数据缓冲区 就是自己写scanf,然后就想LZ说的那样,每次分配空间,但需要释放前面的空间,比如这次是200,但是这时你发现不够,就需要释放200个空间,分配400空间,循环这样
[解决办法]
malloc
realloc
free
[解决办法]
你可以每次只读入一个字符,然后存储在动态分配的内存中,这样如果超出的话可以使用realloc函数重新分配内存。
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';