2015-09-14 3 views
0

Мой массив определяется как этотпамяти первого элемента в динамическом массиве полукокса

int buffSize = 80; 
char* buff = (char*) malloc(sizeof(char) * buffSize); 

Во-первых, я думал, что &buff должна быть такой же, как &buff[0], но, видимо, это не так! Я что-то пропустил? Это утверждение печатает два различных значения для этих двух:

printf("COMPARE: buff=%u, buff[0]=%u\n", &buff, &buff[0]); 

Во-вторых, почему я спросил, потому что я пытаюсь создать большой буфер и «вручную» делить его использовать с getline. В принципе, я хотел бы сделать что-то вроде этого:

int byte_read, total_read = 0; 
do 
{ 
    read = getline(&buff[totalRead], buffSize, inFile); //where inFile is just a file handler 
    totalRead += read; 
} 
while (byte_read > 0); 
+1

[Не бросать malloc] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Barmar

+0

Вы, вероятно, хотели 'buffsize - total_read' в' getline 'call, иначе вы можете переполнить. –

+0

Вы, кажется, мысленно путаете указатель с тем, на что он указывает. Не делайте этого; они являются двумя совершенно отдельными сущностями. –

ответ

4

buff является указателем, и &buff является адрес этого указателя. С другой стороны, &buff[0] - это адрес места, на который указывает указатель, и должен иметь то же значение, что и buff.

Подводя итоги, ожидайте buff и &buff[0], чтобы иметь то же значение.

+0

Так как 'getline' принимает' & buff', то есть адрес указателя на массив символов, предположительно, нет чистого способа сделать то, что я хочу, как описано выше? – 0x56794E

+0

@abcXYZ 'getline' не принимает' & buff'. Думаю, ты не понял моего ответа. – juanchopanza

+0

Эта страница сказала, что 'getline' занимает адрес указателя, то есть' & buff': http://crasseux.com/books/ctutorial/getline.html Я, должно быть, что-то неправильно понял? – 0x56794E

Смежные вопросы