비슷한 질문이 게시 된 적이 있지만 내 문제를 해결할 수 없었습니다.문자 배열 끝 부분에 예기치 않은 문자가 있음 - C
나는 다음과 같은 C 코드가 :
14 'D의 등 임의의 문자 다음에 예상 다음 (14')의 C 년대 (이전의 문자열로 출력하는 모든 문자열 textString4 기대할 예상대로 작동#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);
}
}
) 어떤 이유로하지만 다른 문자열이이 문제가 없습니다.
I는 메모리 문제였다 가정하지만char *textStringX = malloc(sizeof(char) * (tLengths[i] + 1));
으로
char textStringX[tLengths[i]+1];
대체 할 때 그 결과는 동일 하였다.
저는 C가 처음인데, 이것에 대한 해결책이 사소한 경우 사과드립니다.
'i'의 값에 상관없이,'sprintf (iChar, "% d", i);를하면,'***는 *** 배열의'iChar' 배열을 쓸 것입니다. 터미네이터를 잊지 마세요! –
또한'fileprintText'를'snprintf'로 직접 쓰지 않으시겠습니까? 그런 코드를 복사하여 붙여 넣은 코드는 일반적인 코드를 함수로 분리하는 좋은 경우입니다. –
'for (i = 0; i <1; i ++)'- 이것은 정말로 당신이 원하는 것입니까? '나는'0의 가치를 결코 넘어 서지 않을 것입니다. – ryyker