Ich weiß, dass ähnliche Fragen schon vorher gepostet wurden, aber ich konnte das Problem für meinen Fall nicht lösen.Unerwartete Zeichen am Ende des Char-Arrays - C
Ich habe den folgenden C-Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char textChars[4] = { 'A', 'B', 'C', 'D' };
char noMatchChars[4] = { '1', '2', '3', '4' };
int tLengths[5] = { 14, 142, 1414, 14142, 141420 };
int i,j;
for (i = 0; i < 1; i++)
{
char textString1[tLengths[i]+1];
char textString2[tLengths[i]+1];
char textString3[tLengths[i]+1];
char textString4[tLengths[i]+1];
for (j = 0; j < tLengths[i]; j++)
{
textString1[j] = textChars[0];
textString2[j] = textChars[1];
textString3[j] = textChars[2];
textString4[j] = textChars[3];
}
textString1[tLengths[i]] = '\0';
textString2[tLengths[i]] = '\0';
textString3[tLengths[i]] = '\0';
textString4[tLengths[i]] = '\0';
FILE *fp;
char filepathPattern[14];
char filepathText[11];
char iChar[1];
sprintf(iChar, "%d", i);
strcpy(filepathText, iChar);
strcat(filepathText, "_text1.txt");
fp = fopen(filepathText, "w");
fprintf(fp, textString1);
fclose(fp);
memset(filepathText,0,strlen(filepathText));
strcpy(filepathText, iChar);
strcat(filepathText, "_text2.txt");
fp = fopen(filepathText, "w");
fprintf(fp, textString2);
fclose(fp);
memset(filepathText,0,strlen(filepathText));
strcpy(filepathText, iChar);
strcat(filepathText, "_text3.txt");
fp = fopen(filepathText, "w");
fprintf(fp, textString3);
fclose(fp);
memset(filepathText,0,strlen(filepathText));
strcpy(filepathText, iChar);
strcat(filepathText, "_text4.txt");
fp = fopen(filepathText, "w");
fprintf(fp, textString4);
fclose(fp);
}
}
Es ist, als für jede Saite erwarten für textString4 erwartet funktioniert, die Ausgänge als 14 ‚D's, wie durch einen zufälligen Charakter gefolgt erwartet und dann 14‘ C ist (die vorherige Zeichenfolge) aus irgendeinem Grund, aber die anderen Strings haben dieses Problem nicht.
Ich nahm es ein Speicherproblem war, aber als ich
ersetzt char textStringX[tLengths[i]+1];
mit char *textStringX = malloc(sizeof(char) * (tLengths[i] + 1));
das Ergebnis war identisch.
Ich bin neu in C so entschuldigt, wenn die Lösung dafür trivial ist.
Unabhängig vom Wert von 'i', wenn Sie' sprintf (iChar, "% d", i); "*** *** schreiben Sie außerhalb der Grenzen des" iChar "-Arrays. Vergiss den Terminator nicht! –
Auch, warum "schnappst du dich nicht direkt in' filePathText''? Und so ein Copy-Paste-Code sieht aus, das ist ein guter Fall, um den gemeinsamen Code in eine Funktion zu zerlegen. –
'für (i = 0; i <1; i ++)' - Ist das wirklich was du vorhast? 'i' wird nie über den Wert von 0 hinaus gehen. – ryyker