NULL-Pointer funktioniert nicht

supervisor

supervisor

Eroberer
hallo!

ich schreib mal wieder ein (c-)programm, und bis jetzt läuft auch alles gut. doch jetzt hab ich ein 2-ebenen-char-array, genauer gesagt dahier:
Code:
char param[20][100];
das is für einen funktionsaufruf von execv() und es werden die parameter für die aufzurufende funktion reingeschrieben. das klappt auch. allerdings muss der letzte string ein NULL-Pointer sein, aber das funktioniert irgendwie nich. mein gcc gibt immer 'incompatible types in assignment' zurück. ich habs schon auf diese verschiedenen arten versucht:
Code:
param[i] = NULL;
(geht nich)

Code:
param[i] = (char*)NULL;
(geht auch nich)

Code:
param[i] = (char*)0;
(wieder nix)

kann mir einer weiterhelfen?????
 
Nuja, dein Array hat auch 2 Dimensionen, also: param[j] = NULL; oder param[j] = '';
 
ne, der char-pointer param soll ja auf die speicheraddresse NULL zeigen, nicht die speicheraddresse auf die von param verwiesen wird, soll 0 enthalten
 
NULL ist eine adresse (ins nichts). du hast aber ein datenfeld von x·y zeichen.

Code:
char *param[20];
param[i] = NULL;
 
stimmt, danke, ich musste zwar noch n bischen mit malloc basteln, aber jetzt gehts.

.hm...in meinem c-buch heisst es immer, dass zwischen nem pointer und nem array kein unterschied ist. anscheinend wohl doch....
 
Ein kleiner Tip aus der Praxis : lass die Finger von Nullpointern; und wenns doch sein soll dann pass hoellisch auf.
 
Ich habe gerade ein kleines Programm geschrieben um der Sache ein wenig auf den Grund zu gehen und bin dabei auf ein neues Problem gestoßen

Code:
#include <stdio.h>
// Wieso schreibe ich schlechterdings ständig Beispielprogramme ?
// Das weis ich auch nicht
// Ach halt doch die Klappe - Verdammte Schizophrenie
int main()
{
	char array[3][6]={"Hallo","Welt"};
	char** temp;
	printf("%p %p\n",array[0],array[1]);
	printf("%s %s\n",array[0],array[1]);
	temp=array[1];
	*array[1]=&array[0];
	*array[0]=temp;
	printf("%p %p\n",array[0],array[1]);
	printf("%s %s\n",array[0],array[1]);
	*array[2]=NULL;
	
}
Ausgabe
Code:
0xbf8b682e 0xbf8b6834
Hallo Welt
0xbf8b682e 0xbf8b6834
4allo .elt
??
 
Zuletzt bearbeitet:
das kann nicht funktionieren du musst die funktion strncpy(char *stringziel,char *stringquelle, size_t anzahl_zeichen) aus string.h nehmen
 
[..].hm...in meinem c-buch heisst es immer, dass zwischen nem pointer und nem array kein unterschied ist. [..]

Das ist falsch. Es gibt schon feine unterschiede.
Code:
int array[1000];
int *pointer = (int*)malloc(1000);
&array ist die adresse an dem das Array liegt
&pointer ist die adresse, an der die adresse des Arrays liegt

oder anders:
(&array == array)
(&pointer != pointer)

die tausend integer von array liegen auf dem stack, die tausend integer, auf die pointer zeigt, auf dem heap.
 
Ein kleiner Tip aus der Praxis : lass die Finger von Nullpointern; und wenns doch sein soll dann pass hoellisch auf.
Na da erzählen viele Bücher aber was Anderes :D
Vor dem Initialisieren (Speicherzuweisung) und nach dem Freigeben des Zeigers sollte man, diesen zufolge, dem Pointer den Wert ´NULL´ zuweisen.

Aber ich gebe dir natürlich Recht, dass man, wie sonst auch im Allgemeinen mit Pointern, sehr vorsichtig mit dem Wert ´NULL´ umgehen muss, wenn man erwähnt, dass Compiler ´NULL´ auch mal auf verschiedenste Art und Weise definieren können.
 
Zuletzt bearbeitet:

Ähnliche Themen

Xubuntu - AVR32-linux crosscompile sqlite

incompatible types in assignment

probleme mit select()

Durch das ganze Unix System bestimmte Dateiart suchen

Installationsproblem vom RPM

Zurück
Oben