无法通过while循环中的指针传递值

时间:2012-10-18 13:54:31

标签: c pointers while-loop

我知道你可以通过指针间接传递一个值:你指定你将某个地址(一个指针)的值(*)分配给某个东西(比如一个char)。

// This works: I can pass char indirectly via pointers    
// by saying "value at char pointer line equals c1 or c2"

char c1 = 'a';
char c2 = 'b';
char* line;

*line = c1;    
*(line+1) = c2;

我可以使用上面的*(第+1行)向右滑动内存空间。但是,当我循环它时,这失败了(下面):

// Output: "Process returned -1073741819 (0xC0000005)"    
// Why?   

char c;    
char* line1;    
int i = 0;

while ((c = getchar()) != EOF){
    *(line1+i) = c;    
    i++;    
}

输出:“处理返回-1073741819(0xC0000005)”

当我尝试迭代while循环时,为什么它无法通过指针间接传递值?非常感谢!

4 个答案:

答案 0 :(得分:3)

  1. 您无法为line1分配值,因为您从未对其进行初始化。
  2. 您正在使用line + i
  3. 访问内存

    也许你想要这样的东西:

    char c;
    
    char array[100];   // Allocate space for 100 chars
    
    char* line1 = array;    // Pointer to allocated memory block
    
    int i = 0;
    
    while ((c = getchar()) != EOF)
    
    {
    
        *(line1+i) = c;
    
        i++;
        // Exit when i == 100
    }
    

答案 1 :(得分:0)

你永远不会给line1分配一个地址,即指向某个地方或分配一个它所指向的缓冲区。

答案 2 :(得分:0)

如果你没有正确初始化line1,那么它就无法工作。

尝试char line1[500];代替char* line1; - 仅限测试;如果你输入超过500个字符,它仍然会崩溃。

答案 3 :(得分:0)

Line1未初始化任何内容。它所指的地址是未定义的。

在C,(或C ++)中,当您将变量声明为指针类型时,不会自动为变量分配有效地址。 这样的事情。

DataType *a_certain_ptr;

您认为a_certain_ptr包含什么?另一个例子可能会给你一个提示。

int a_certain_number;    // this line is in some function.

a_certain_number的价值是什么?

不难发现a_certain_number可以是任何东西,它是未初始化的,因此它的值未定义。 它可以等于1,-1或15033等。

同样适用于a_certain_ptr。现在这个变量,因为你没有初始化它,可以包含任何值。它可以是1,-1,353210,甚至可能是指向堆栈某处的有效地址......

稍后当你试图执行

*(line1+i) = c;

你指的是 i * sizeof(char)字节偏移的无效地址,这仍然是无效的....