Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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字符串和指针_C_String_Pointers - Fatal编程技术网

C字符串和指针

C字符串和指针,c,string,pointers,C,String,Pointers,我有以下代码: #include <stdlib.h> #include <stdio.h> #include <string.h> struct wordlist { char *value; struct wordlist *next; }; int compare (struct wordlist *one , struct wordlist *two) { return strcmp(one->value, two->

我有以下代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct wordlist {
    char *value;
    struct wordlist *next;
};
int compare (struct wordlist *one , struct wordlist *two) {
    return strcmp(one->value, two->value);
}
void add(struct wordlist *pp, char *value) {
    struct wordlist *new;
    new = malloc(sizeof(*new));
    new->value = value;
    for ( ; pp != NULL; pp = pp->next) {
        if (compare(pp, new) > 0 ) {
            break;
        }
    }
    new->next = pp;
    pp = new;
}
void display(struct wordlist *ptr) {
    for (; ptr != NULL; ptr = ptr->next) {
        printf("%s\n", ptr->value);
    }
}
应该打印出来

第1项第2项第3项第4项


但是它没有打印任何东西,我不明白为什么。

是不是需要将指针传递给指针

void add(struct wordlist **pp, char *value) {
struct wordlist *new;
new = malloc(sizeof(*new));
new->value = value;
for ( ; (*pp) != NULL; (*pp) = (*pp)->next) {
    if (compare((*pp), new) > 0 ) {
        break;
    }
}
new->next = (*pp);
(*pp) = new;
}

是否需要将指针传递给指针

void add(struct wordlist **pp, char *value) {
struct wordlist *new;
new = malloc(sizeof(*new));
new->value = value;
for ( ; (*pp) != NULL; (*pp) = (*pp)->next) {
    if (compare((*pp), new) > 0 ) {
        break;
    }
}
new->next = (*pp);
(*pp) = new;
}

此方法不会更改根,也可以工作

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct wordlist {
    char *value;
    struct wordlist *next;
};

int compare (struct wordlist *one , struct wordlist *two) {
    return strcmp(one->value, two->value);
}

void add(struct wordlist *pp, char *value) {
    struct wordlist *new;

    new = malloc(sizeof(*new));
    new->value = value;

    for ( ; pp->next != NULL; pp = pp->next) {
        if (compare(pp->next, new) > 0 ) {
            break;
        }
    }
    new->next = pp->next;
    pp->next = new;

}
void display(struct wordlist *ptr) {
    while ( ptr->next != NULL ) {
        ptr = ptr->next;
        printf("%s\n", ptr->value);
    }
}

int main(void) {
    struct wordlist root;

    root.next = NULL;
    add(&root, "item1");
    add(&root, "item2");
    add(&root, "item4");
    add(&root, "item3");
    display(&root);
    return 0;
}
#包括
#包括
#包括
结构词列表{
字符*值;
结构单词表*下一步;
};
int比较(结构字列表*1,结构字列表*2){
返回strcmp(一->值,二->值);
}
void add(struct wordlist*pp,char*value){
struct wordlist*新建;
新=malloc(sizeof(*新));
新建->值=值;
对于(;pp->next!=NULL;pp=pp->next){
if(比较(pp->next,new)>0){
打破
}
}
新建->下一步=pp->下一步;
pp->next=新建;
}
无效显示(结构字列表*ptr){
while(ptr->next!=NULL){
ptr=ptr->next;
printf(“%s\n”,ptr->value);
}
}
内部主(空){
结构字表根;
root.next=NULL;
添加(&root,“item1”);
添加(&root,“item2”);
添加(&root,“item4”);
添加(&root,“item3”);
显示(&root);
返回0;
}

此方法不会更改根目录,也可以工作

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct wordlist {
    char *value;
    struct wordlist *next;
};

int compare (struct wordlist *one , struct wordlist *two) {
    return strcmp(one->value, two->value);
}

void add(struct wordlist *pp, char *value) {
    struct wordlist *new;

    new = malloc(sizeof(*new));
    new->value = value;

    for ( ; pp->next != NULL; pp = pp->next) {
        if (compare(pp->next, new) > 0 ) {
            break;
        }
    }
    new->next = pp->next;
    pp->next = new;

}
void display(struct wordlist *ptr) {
    while ( ptr->next != NULL ) {
        ptr = ptr->next;
        printf("%s\n", ptr->value);
    }
}

int main(void) {
    struct wordlist root;

    root.next = NULL;
    add(&root, "item1");
    add(&root, "item2");
    add(&root, "item4");
    add(&root, "item3");
    display(&root);
    return 0;
}
#包括
#包括
#包括
结构词列表{
字符*值;
结构单词表*下一步;
};
int比较(结构字列表*1,结构字列表*2){
返回strcmp(一->值,二->值);
}
void add(struct wordlist*pp,char*value){
struct wordlist*新建;
新=malloc(sizeof(*新));
新建->值=值;
对于(;pp->next!=NULL;pp=pp->next){
if(比较(pp->next,new)>0){
打破
}
}
新建->下一步=pp->下一步;
pp->next=新建;
}
无效显示(结构字列表*ptr){
while(ptr->next!=NULL){
ptr=ptr->next;
printf(“%s\n”,ptr->value);
}
}
内部主(空){
结构字表根;
root.next=NULL;
添加(&root,“item1”);
添加(&root,“item2”);
添加(&root,“item4”);
添加(&root,“item3”);
显示(&root);
返回0;
}

是的,我也是,,,,为什么不能改变(5)不变
5
:Dlol,我理解代码,但我看不出任何原因它不能工作哪行@就像我所需要的,谢谢。是的,我也是,,,,为什么不能
change(5)不变
5
:Dlol,我理解代码,但我看不出任何原因它不能工作哪行@TonyTannousfix就是我需要的,谢谢。在插入位置丢失之前,你应该在列表中使用其他变量。OP中的所有
pp
s应该成为你提案中的
(*pp)
s。这个
*pp->next
需要是
(*pp)->next
(*pp)=(*pp)->next)
这是致命的错误。在插入位置丢失之前,您还应该在列表中使用其他变量。OP中的所有
pp
s应在您的提案中成为
(*pp)
s。此
*pp->next
需要是
(*pp)->next
<代码>(*pp)=(*pp)->下一步)
这是致命的错误。确实如此,但我不想一直更改根。不管怎样,谢谢你,但是我不想一直改变根。无论如何谢谢你