C-string-Funktion (strcopy,strcat...,strstr) mit arrays und Zeiger

Immer wenn ich mich mit einer dieser Funktionen in dev-C++(ich weiß, das ist alt, aber aus irgendeinem Grund immer noch gelehrt, an meiner Hochschule.)

strcat,strcpy,strcmp,strchr...//And their variants stricmp...

Das erste argument dieser Funktionen ist immer ein array (ich.e:

char ch[]="hello";

Aber es kann nicht sein, einen Zeiger auf eine Zeichenfolge bc aus irgendeinem Grund dies verursacht einen Absturz.
In der Tat ein Beispiel für eine Blick auf diese beiden codes:

code1:

#include<stdio.h>
#include<string.h>
main()
{char ch[20]="Hello world!";
 char *ch2="Hello Galaxy!";
 strcat(ch,ch2);
 printf("%s",ch);
 scanf("%d")//Just to see the output.
}

Dieser code funktioniert einwandfrei und gibt das erwartete Ergebnis(Hallo Welt!Hallo Galaxy!)

Aber die inverse code2 abstürzt.

code2:

#include<stdio.h>
#include<string.h>
main()
{char ch[20]="Hello world!";
 char *ch2="Hello Galaxy!";
 strcat(ch2,ch);
 printf("%s",ch2);
 scanf("%d")//Just to see the output.
}

Dieser code stürzt ab und verursacht eine

file.exe has stopped working Error.

Dies ist die gleiche für fast alle Saiten-Funktionen, die zwei Argumente nimmt.
Was ist die Ursache für dieses problem.

  • Das ist nicht C++. main erfordert eine explizite return-Typ es ist, und der code ist alle C-sonst.
  • c-faq.com/strangeprob/strlitnomod.html
  • ist es nicht ein Pufferüberlauf mit ch[20], sollte es nicht ch[25]?
  • 26, wenn ich richtig gezählt habe.
  • Ja, es ist wahr es gibt überlauf! Aber das ist nicht, wo das problem herkommt,in meinem eigentlichen code 20 200!Tut mir Leid, dass.
InformationsquelleAutor user1544624 | 2012-07-26
Schreibe einen Kommentar