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)->下一步)
这是致命的错误。确实如此,但我不想一直更改根。不管怎样,谢谢你,但是我不想一直改变根。无论如何谢谢你