Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printf(“s”)工作不正常_C_String_Printf - Fatal编程技术网

C printf(“s”)工作不正常

C printf(“s”)工作不正常,c,string,printf,C,String,Printf,所以我有一个大代码(所以不能把整个东西放在这里)。 但在某种程度上我有这个 while(ptr1!=NULL) { printf("%sab ",ptr1->name); puts(ptr1->name); ptr1=ptr1->next; } 现在,我的ptr1指向一个结构数组的一个条目(每个条目都是一个链表),该结构是从一个文件填充的 现在在这个循环中,它打印 FIRSTab FIRST SECONDab SECOND THIRD 为什么我的第三张不打印两次 如果我这样

所以我有一个大代码(所以不能把整个东西放在这里)。 但在某种程度上我有这个

while(ptr1!=NULL)
{
printf("%sab ",ptr1->name);
puts(ptr1->name);
ptr1=ptr1->next;
}
现在,我的ptr1指向一个结构数组的一个条目(每个条目都是一个链表),该结构是从一个文件填充的

现在在这个循环中,它打印

FIRSTab FIRST
SECONDab SECOND
THIRD
为什么我的第三张不打印两次

如果我这样做的话

printf(" %s",ptr1->name); // i.e. one space before %s
我明白了

THIRDD
在%s之前加上2个空格会给我

THIRDRD
3个空格表示

THIRDIRD
等等

此外,如果我尝试执行strcmp(ptr1->name,“THIRD”),我将无法获得第三个的正确比较。 为什么

下面是我如何填充结构的

// G is the structure, fp is passed as argument to function.
//THe file format is like this.
//FIRST SECOND THIRD
//NINE ELEVEN 
//FOUR FIVE SIX SEVEN
// and so on.
int i=0,j=0,k=0;
char string[100];
while(!feof(fp))
{
if(fgets(string,100,fp))
{
G[i].index=i;
k=0;j=0;
//\\printf("%d",i);
//puts(string);
node *new=(node*)malloc(sizeof(node));
new->next=NULL;
G[i].ptr=new;
node* pointer;
pointer=G[i].ptr;
while(string[j]!='\n')
{
    if(string[j]==' ')
    {
    pointer->name[k]='\0';

    k=0;
        node *new=(node*)malloc(sizeof(node));
        new->next=NULL;
        pointer->next=new;
        pointer=pointer->next;
        j++;
    }
    else
    {   
    pointer->name[k++]=string[j]; 
    j++; 
    }
}
pointer->name[k]='\0';
i++;
}

第三个字符串可能包含字符
third
,后跟
\r
(回车)。它为什么包含这些内容只能通过了解文件的内容以及用户如何读取来确定

您可能正在使用单个换行符作为行终止符的系统上工作(但要打开的文件来自使用回车符和换行符对的系统),或者传递给您的文件指针(
fp
)是以二进制模式打开的


如果无法更改要在文本模式下打开的文件指针,则快速修复方法可能是将此条件
while(string[j]!='\n')
更改为
while(string[j]!='\n'&&string[j]!='\r')
,尽管您可能需要一个处理多个空白字符的更健壮的解决方案。

如何获得
第三个
/code>?是否以0结尾?是否确定
ptr1->name
'\0'
结尾?这不是真正的代码。请给我们真正的密码,你可以在那串里找到鱼。尝试将您的输出重定向到一个文件,并用十六进制编辑器打开它,以查看具体内容。
ptr
ptr1
都在实际代码中吗?@Kraken:这完全取决于您。以文本模式打开文件:
fopen(“任意”、“r”)
;注意
“r”
,而不是
“rb”
。fp是
fp=fopen(“file.txt”,“r”)@CharlesBailey谢谢,现在可以用了。不管怎样,我还是解决了这个问题?为什么“\n”不起作用?@Kraken:你的程序运行在什么操作系统上?你的文本文件是从哪里来的?