C printf(%s),字符串问题。。。本质上,%s正在导致行覆盖。
好吧,为了对正在发生的事情有一个合理的了解 我正在将csv表中的数据读取到二维数组中,如下所示:C printf(%s),字符串问题。。。本质上,%s正在导致行覆盖。,c,C,好吧,为了对正在发生的事情有一个合理的了解 我正在将csv表中的数据读取到二维数组中,如下所示: tableFile = fopen(argv[4], "r"); 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+
tableFile = fopen(argv[4], "r");
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;
default:
tableArray[i][j][k++] = c;
break;
}
} //end file transfer
fclose(tableFile);
在读了文件之后,我做了一堆无关紧要的垃圾,但问题是当我去打印从上述表格中获取的数据时,printf会发疯
例如,如果我试着说类似的话
char *string = malloc(256*sizeof(char));
string = tableArray[9][46];
printf("What the heck is going on with this string %s ", string);
看到%s后面的空格了吗?它实际上会覆盖“W”,并且printf会显示类似“这个强HELLO到底是怎么回事”
有什么想法吗
谢谢 您的读入行以
'\r'
结尾。您应该特别在开关中处理'\r'
案例您的读入行以'\r'
结尾。您应该特别在您的开关中处理'\r'
大小写文件有CR('\r'
)字符,您将它们放在子字符串的末尾。文件有CR('\r'
)字符,并将它们放在子字符串的末尾。该字符串可能类似于“HELLO\r”
。回车将光标移到行的开头。字符串可能类似于“HELLO\r”
。回车将光标移到行的开头。在输入文件中,行是如何终止的
如果您使用的是Windows行尾转换,即\r\n
,则必须在交换机中也跳过\r
。输入文件中的行是如何终止的
如果您使用的是Windows线端转换,即\r\n
,则必须在交换机中也跳过\r
。次要问题:您的malloc
是不必要的,并且正在泄漏内存。Windows输入由“\r\n”
组成。从输出字符串中删除'\r'
。getc
返回一个int而不是char。我认为您对C非常陌生,因为我认为您希望从tableArray[9][46]复制字符串,而不是指向它。如果只使用printf(“%s\n”,string),printf会说什么代码>?当您点击EOF时,您的代码进入default:
语句,并将EOF
的值写入tableArray
。您需要在switch语句中明确说明EOF
的大小写,以避免出现这种情况,或者在fgetc
返回后立即添加对EOF
的检查。次要问题:您的malloc
是不必要的,并且正在泄漏内存。Windows输入由“\r\n”
组成。从输出字符串中删除'\r'
。getc
返回一个int而不是char。我认为您对C非常陌生,因为我认为您希望从tableArray[9][46]复制字符串,而不是指向它。如果只使用printf(“%s\n”,string),printf会说什么代码>?当您点击EOF时,您的代码进入default:
语句,并将EOF
的值写入tableArray
。您需要在switch语句中为EOF
指定一个明确的大小写,以避免出现这种情况,或者在fgetc
返回后立即添加一个对EOF
的检查。另外请注意,printf
是缓冲的,通常需要\n
来刷新。显然就是这么简单。太神了我所要做的就是在开关上添加几个箱子,基本上忽略了回车和EOF,一切都很好。哎呀!我花了很长时间想弄清楚到底发生了什么。你们中有几个人在这条轨道上。非常感谢您的支持。还要注意,printf
是缓冲的,通常需要\n
刷新。很显然,就是这么简单。太神了我所要做的就是在开关上添加几个箱子,基本上忽略了回车和EOF,一切都很好。哎呀!我花了很长时间想弄清楚到底发生了什么。你们中有几个人在这条轨道上。非常感谢您的支持。