我有以下代码:
char *buff = (char *)malloc(sizeof(char)*120);
char *ts_t = (char *)malloc(sizeof(char)*80);
/*Generating invalid test case for timestamp.*/
printf("Out side of ts.\n");
while(fgets (ts_t, 80, fp_ts)!=NULL)
{
printf("Inside ts.\n");
//ts_t[strlen(ts_t)-1] = '\0';
memset(buff,0,120);
memcpy(buff,ts_t,strlen(ts_t)-1);
printf("The ts is :%s",buff);
fprintf(fp_test_case,"%s\t%s\t%s%d\t%s\t%s\t%s%04d\n",buff,ver,txn,digit_generate(num),aspid,uid,"Test",count_testCase);
print_description( fp_description,ts_t,count_testCase,"TimeStamp");
count_testCase++;
}
printf("Invalid Time stamp case generated.\n");
预期的是:
ts的一面。
内部ts。
ts是:05-26-2015T13:53:33.509
内部ts。
ts是:05-26-2015T13:53:33.509
但它打印为:
ts的外侧
内部ts。
内部ts。
里面ts.:05-26-2015T13:53:33.509
里面ts.:2015-26-05T13:53:33.509
我在这里做错了什么? 感谢。
答案 0 :(得分:8)
您的文件具有DOS样式的换行符(“\ r \ n”),但您在使用* nix样式换行符(“\ n”)的系统上运行代码。额外的CR是将终端光标移回第一列,然后打印另一行。从行中剥离CR或以可以处理备用换行样式的模式打开文件。
答案 1 :(得分:1)
输入文件有\r\n
行结尾,但文件以二进制或Unix文本模式打开。另请参阅@Ignacio Vazquez-Abrams
而不是memset(buff,0,120); memcpy(buff,ts_t,strlen(ts_t)-1);
,放弃buff
并使用以下内容删除潜在的\r
和\n
,无论文件是如何打开的。
ts_t[strcspn(ts_t, "\r\n")] = `\0`; // to get rid of potential `\r` and `\n`.