fprintf "segmentation fault" - erklären, wie ich bin 5

Ich versuche zu schreiben, einige strings in eine Datei. Dies kompiliert ohne warnings, aber wenn ich das eine.es segfaults. Es tut erstellen der Ziel-Datei, jedoch. Ich bin sehr neu in C, so dass ich entschuldige mich für meine Formatierung und andere Mängel. Hier ist mein code:

#include<stdio.h>

int main (void)
{
    FILE *fp_out;

    char str1[]="four score and seven years ago our";
    char str2[]="fathers broughy forth on this continent,";
    char str3[]="a new nation, concieved in Liberty and dedicated";
    char str4[]="to the proposition that all men are created equal.";

    fp_out=fopen("my_file", "w");

    if(fp_out!=NULL)
    {
        fprintf(fp_out,"%s\n", str1[100]);
        fprintf(fp_out,"%s\n", str2[100]);
        fprintf(fp_out,"%s\n", str3[100]);
        fprintf(fp_out,"%s\n", str4[100]);
        fclose(fp_out);
    }
    else
        printf("The file \"my_file\" couldn't be opened\n");

    return 0;
}
  • str1[100]? KEINE der Saiten irgendwo in der Nähe von 100 Zeichen lang sind, so sind Sie acessing Speicher, die noch nicht vergeben ist. es soll;d fprintf(fp_out, "%s\n", str1)
  • es gibt keine strX[100]
  • So, ich sollte die genaue Länge der Zeichenfolge, gibt es?
  • Der Formatbezeichner %s erwartet eine string-variable oder ein Zeiger auf ein Zeichen. Sie übergeben ein einzelnes Zeichen str1[100] zum Beispiel, das ist keine gültige Adresse. Sie wollen pass str1.
  • Auch: du bist die übergabe eines char wo fprintf erwartet eine char *. I. e. ändern Sie es zu strX ohne das array-subskript ([100])
  • Nein, ein Zeiger auf den Anfang der Zeichenkette. Die Saiten sind nul (Zeichen 0) beendet, es wird also ausrechnen, wie lange sind Sie selbst.
  • Wenn Sie lernen, C, verwenden Sie ein C-Buch oder tutorial? Es ist eine viel schnellere Weg, um zu lernen, als nur raten. 🙂
  • Danke für die Klarstellungen, ich habe es funktioniert und jetzt weiß ich ein bisschen mehr über strings :B
  • Ich bin dabei, ein Intro zu C-Klasse im college, aber ich schlief in der Klasse, während einige der Zeichenfolgen Vorträge.
  • 5-jährige wird nicht erlaubt, auf StackExchange-Netzwerk.
  • haha ja, es kann ein wenig trocken.

InformationsquelleAutor three six | 2014-03-07
Schreibe einen Kommentar