我正在尝试将用户输入的搜索词与链表中的多个名称进行比较。我肯定知道它在strcmp上存在段错误,但在strcmp上存在段错误的解决方案似乎都不是问题。

这是我的代码!我对StackOverflow&C还是很陌生,因此对于在发布此内容或实际编程中出现的任何愚蠢错误,我深表歉意。 > <

struct node{
char* name;
struct node* next;
};

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){
char reader;
char srchbuff[1001];
char name[10] = "Justin";
char* srch;
int i;

struct node *head;
struct node *cur;

head = malloc(sizeof(struct node));
head->name = name;
head->next = 0;

for(i=0; i<1000; i++){
   scanf("%c", &reader);
   srchbuff[i] = reader;
}


srchbuff[i] = '\0';
srch = malloc(sizeof(char)*i);
strcpy(srch, srchbuff);

cur = head;

while( (cur != NULL) && (strcmp(cur->name, srch)) != 0){
    cur = cur->next;
}
}

在一个单独的函数中分配了其他节点,这些节点运行良好,并且在一个单独的函数中分配了信息(它也可以正常运行),并且我的结构位于我的头文件中,因此很高兴并且可以识别。

我还用gdb和printf语句进行了测试,以确保strcmp处于我的隔离段位置,而且确实在。在此先感谢您的任何建议 :)

最佳答案

在行中

srchbuff[i] = '\0';

您在srchbuff末尾写了一个字节。

内存srch指向的内存未初始化。所以什么都可能发生。
cur也未初始化。这意味着cur指向任何地方,cur->name也指向任何地方。

关于c - 在strcmp上出现segfault-可能会发出从struct传递指针的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13433915/

10-10 22:57