首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C 语言指针赋值的有关问题,先多谢各位了

2013-06-25 
C 语言指针赋值的问题,先谢谢各位了。背景:我在做一个文件字符串替换的小程序,用户要替换文件中一个数据,这

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
[解决办法]
引用:
背景:我在做一个文件字符串替换的小程序,用户要替换文件中一个数据,这个数据很大,也可以是不确定。

这个时候,我用了一个指针ptr来存放用户输入的数据,通过函数scanf(),将用户输入的值存入ptr;

问题是:我如何给ptr初始化,如果我用“char ptr[100]”初始化ptr,那么,当用户输入数据大于100 的时候,肯定就出错了。即使将100换到1000,用户输入数据也可能大于1000;
所以,我该怎么初始化呢?

我的另一个思路就是使用ptr指针,这个时候,还是有问题,怎么初始化这个ptr?
我尝试用char *ptr=NULL,这个时候报错了,可是如果不给他这个NULL值,肯定更会报错,这个时候,我要怎么给ptr初始化呢?

结尾处:先谢谢各位了。在线等。


你可以每次只读入一个字符,然后存储在动态分配的内存中,这样如果超出的话可以使用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';

热点排行