这对我来说是一个非常迷人的错误,因为从字面上讲,一小时前这段代码工作正常,但现在却没有。
基本上发生的事情是,下一行的第一个“块”的第一个字符被追加为最后一个“块”的最后一个字符
Whereby'block'我的意思是该行/ col中的字符串。
例如,假设数组应该是
1,2,3,Hello
4,5,6,Wonder
正在阅读
1,2,3,Hello4,
6,Wonder, ,
这是我一直在使用的逻辑。我真的不知道发生了什么变化,所以任何建议都会很棒。
tableFile = fopen(argv[4], "r");
//pulling the table data from the file
char tableArray[30][50][256];
char c;
int i=0, j=0, k=0;
while(c != EOF){
c = fgetc(tableFile);
switch(c)
{
case ',':
tableArray[i][j++][k]='\0';
k=0;
break;
case '\n':
tableArray[i++][j][k]='\0';
j=0;
k=0;
break;
case '\r':
break;
case EOF:
break;
default:
tableArray[i][j][k++] = c;
break;
}
} //end file transfer
//Just to display, ignore magic numbers as (mostly) irrelevant
int a, b;
for (a = 0; a < 20; a++)
{
for (b = 0; b < 47; b++)
{
printf ("%s", tableArray[a][b]);
if (b<46)
printf (", ");
}
printf ("\n");
}
fclose(tableFile);
答案 0 :(得分:1)
您没有初始化数组。不能保证零填充。添加
memset(tableArray, 0, sizeof(tableArray))
case EOF:
必须在最近的字符串中添加NULL
终止符。
答案 1 :(得分:0)
这真的是由于我原来的帖子下面的评论。但是,正如令人作呕和糟糕的编码形式一样......这就是一贯解决它的问题,而不是我为它感到骄傲......并且仍然对这些想法持开放态度:
tableFile = fopen(argv[4], "r");
//pulling the table data from the file, lazy magic numbers here...
char tableArray[30][50][256];
char c;
int i=0, j=0, k=0;
memset(tableArray, 0, sizeof(tableArray));
while(c != EOF){
c = fgetc(tableFile);
switch(c)
{
case ',':
tableArray[i][j++][k]='\0';
k=0;
break;
case '\n':
tableArray[i++][j][k]='\0';
j=0;
k=0;
break;
case '\r':
tableArray[i++][j][k]='\0';
j=0;
k=0;
break;
case EOF:
tableArray[i][j][k] = '\0';
break;
default:
tableArray[i][j][k++] = c;
break;
}
} //end file transfer
/* //Only relevant for displaying the tableArray
int a, b;
for (a = 0; a < 20; a++)
{
for (b = 0; b < 47; b++)
{
printf ("%s", tableArray[a][b]);
if (b<46)
printf (", ");
}
printf ("\n");
}
*/
fclose(tableFile);