我知道之前发布了类似的问题,但我无法解决我的问题。
我有以下C代码:
#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);
}
}
对于textString4所期望的每个字符串,它按预期工作,它按预期输出为14'D',随后是随机字符,然后由于某种原因输出14'C(前一个字符串),但其他字符串没有此问题。
我认为这是一个记忆问题,但是当我更换时
char textStringX[tLengths[i]+1];
char *textStringX = malloc( sizeof(char) * ( tLengths[i] + 1 ) );
结果是一样的。
我是C的新手,如果对此的解决方案很简单,那么道歉。
答案 0 :(得分:1)
第一个问题与字符串相关。以下几行:
char iChar[1];
sprintf(iChar, "%d", i);
是一个问题,因为你创建了一个char数组iChar
,只有一个char
的空间,然后在下一行尝试使用字符串函数sprintf
来将两个字符放入iChar
:i
的值(此时为0)和NULL
字符。您需要创建具有更多空间的iChar
:即
char iChar[3]; // will allow printing up to any two digit value + NULL.
EG。零看起来像这样:|0|\0|\0|
99像这样:|9|9|\0|
在C中,没有NULL终止,您没有 C string 。没有C字符串,字符串函数将无法正常工作。
因为对iChar
的写入在上面的调用中失败,所以代码中的下一行,也是字符串函数总是期望NULL终止的char数组。其他任何事情都会导致他们失败:
strcpy(filepathText, iChar);
strcat(filepathText, "_text1.txt");
因为我不知道你的文本文件的内容,所以我不能把你的代码超出这个范围。但要解决这些字符串问题,然后逐行逐步执行代码。我相信你引用的大部分问题都将得到解决。