Jak posunout ukazatel na proměnnou? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak posunout ukazatel na proměnnou? – C / C++ – Fórum – Programujte.comJak posunout ukazatel na proměnnou? – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
oxidián0
Grafoman
13. 2. 2015   #1
-
0
-

Mám nějaký řetězec načtený v proměnné block:

FILE * fp;
fp = fopen(filename, "rb");
char block[54];

fread(block, 54, 1, fp);

readbytes(&block, &someitem); // &block nebo block to je jedno

uvnitř funkce readbytes potřebuju navýšit odkazovanou proměnnou block, jak to udělat? Chci posunout ukazatel řekněme o dva bajty doprava.  pSourceStr += 2; funguje lokálně na pSourceStr ale jak to udělat aby se to projevilo ve vnějším prostředí (mimo funkci na proměnné block)?

static void read4bytes(char * pSourceStr, uint32_t* item){

}
Nahlásit jako SPAM
IP: 78.45.199.–
KIIV
~ Moderátor
+43
God of flame
13. 2. 2015   #2
-
0
-

char ** pSourceStr...

*pSourceStr += 2; ...

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Grafoman
13. 2. 2015   #3
-
0
-

Z nějakého důvodu ale *pSourceStr má hodnotu 0x364d42 "" . Ještě než zavolám tu funkci, tak block začíná na písmena BM6 a pak jsou tam �. Pak zajedu dovnitř funkce a podívám se jakou má hodnotu *pSourceStr a neukazuje to BM6 takže to nechápu. **pSourceStr ale ukazuje hodnotu "�00". Tak na nějaký buffer to odkazuje ale asi ne na tu správnou pozici. Protože chci aby to ukazovalo na začátek.

Nahlásit jako SPAM
IP: 78.45.199.–
KIIV
~ Moderátor
+43
God of flame
13. 2. 2015   #4
-
+1
-
Zajímavé

#3 oxidián
sorry, neuvedomil jsem si, ze tam davas staticke pole :) Musis si udelat kopii pointeru jako  char * neco = block;

a pak predavat  &neco

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Grafoman
13. 2. 2015   #5
-
0
-

Momentálně to mám takto:

static void readChars(char ** pSourceStr, char* item, size_t size) {
  memcpy(item,pSourceStr,size);
  *pSourceStr+=size;
}

int bmp_read_header(char * filename, BMPFILE *bmpfile)
{
  FILE * fp;
  if ((fp = fopen(filename, "rb")) == NULL)
    return -1;
  char block[14+40]; char * pBlock;
  if ((fread(block, 14+40, 1, fp)) == NULL)
    return -2;

  readChars(&pBlock, bmpfile->header.magicNo, 2);
  read4bytes(&pBlock, &bmpfile->header.fsize);

}

Posílám obrázek:

Připojen obrázek.

Teď to vypadá že odkazuje na nějakou náhodnou hodnotu

Nahlásit jako SPAM
IP: 78.45.199.–
KIIV
~ Moderátor
+43
God of flame
13. 2. 2015   #6
-
0
-

aby ne, kdyz ho neinicializujes

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Grafoman
13. 2. 2015   #7
-
0
-

Tak už je to jasné. Konečně mi to funguje. Dík

Nahlásit jako SPAM
IP: 78.45.199.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý