Char vergleichen

üäpöol

Erfahrenes Mitglied
Hi,

ist nur ne kleine Sache. Ich möchte in C ein Char mit etwas vergleichen, im konkreten Fall:
C:
if (szString[i] == '\0')
Leider funktioniert das nicht. Soweit ich mich entsinnen kann, darf man das auch so nicht machen. Dafür gibt es glaube ich strcmp(). Ich darf nur leider keine Bibliotheke includieren. Muss ich dafür extra eine Assemblerfunktion schreiben, oder geht das auch anders?
 
Ich bin mir nicht ganz sicher, aber irgendwann endet doch jedes CharArray, oder?
Hier mehr Code:
C:
int printString(char* szString) {
	int i=0;
	int finished=0;
	while (finished != 1)
	{
		if (szString[i] == '\0') {
			finished=1;
		}
		else {
			print(szString[i]);
			i=i+1;
		}
	}
	return 0;
}
Die Funktion print() funktioniert im Prinzip auch.
Ich habe das Problem schon so eingeschränkt, dass
Code:
if (szString[i] == '\0')
leider nie richtig ist, dadurch wird dann auch nicht zurückgesprungen.

Tut mir Leid, ich habe mich getäuscht. i wird nicht inkrementiert. Ich weiß leider nicht, warum.
 
Zuletzt bearbeitet von einem Moderator:
Hi

print gibt also eine einzelnen char (keinen Pointer oder so) aus?
Dann müsste das funktionieren.
Geht zwar einfacher, aber sollte so auch passen.

(strcmp ist zum Vergleichen von zwei kompletten Strings.
Jeden char einzeln mit = so wie hier passt schon.)

Prüf mal, was als szString übergeben wird.
Ob das überhaupt eine \0 hat.
 
Print ist eine Assemblerfunktion, die das einzele Char ausgibt. Es muss an dem 'i' liegen, weil das nicht inkrementiert wird. Hm. Ich weiß nicht, wie ich überprüfen soll, was ankommt. Ich übergebe printString("Ha"); Aber C hängt doch automatisch ein Nullzeichen an, oder?
 
Hi,

print.asm
Code:
[BITS 16]
global print

print:
	push bp
	mov bp, sp
	mov al, [bp+4]
	mov ah, 0x0E
	int 0x10
	pop bp
	ret

Und die C Datei
C:
extern void print();
extern void restart();
extern char read();
int printString(char* szString);

short i=0;
short finished=0;

int main() {
	printString("Ha");
	while(read() != 'r');
	restart();
	return 0;
}

int printString(char* szString) {
    int i=0;
    int finished=0;
    while (finished != 1)
    {
        if (szString[i] == '\0') {
            finished=1;
        }
        else {
            print(szString[i]);
            i=i+1;
        }
    }
    return 0;
}

Ist alles 16 bit.
 
Also ich habe statt dem print() ein printf() genommen (ich kenne mich bei Assembler nicht aus) und alles hat funktioniert. Entweder liegt der Fehler am print(), oder in der main-Umgebung.

Lg
 
Ich schreibe ein kleines OS. Deshalb kann ich keine Funktionen benutzen. print('X') funktioniert perfekt. Ich benutze GCC MinGW als Crosscompiler. Kann es daran liegen?
 
Zurück