c char指针比较

时间:2012-03-29 07:46:42

标签: c pointers char

struct list{
   char *Name;
};

void chekFC(struct list *newList){
  char *fC = newList->Name;
  printf("%s\n", &fC);                   //I can print it
  if(fC[0] == '+')                       //Any error??
  printf("Yes");
}

int main(){
   struct list *newList = (struct list *)malloc(sizeof(struct list));
   newList->Name = "+abc";
   chekFC(newList);
}

如果我将代码更改为以下

,它可以运行
void chekFC(struct list *newList){
  char *fC = newList->Name;
  printf("%s\n", &fC);                   //I can print it
  if(fC[0] == '+')  {}                     // Add {}  nothing run in the if condition, than the program can run
  printf("Yes");
}

为什么这个程序无法运行?错误是Segmentation fault(core dumped)

5 个答案:

答案 0 :(得分:1)

您确定已分配newList->Name吗?

答案 1 :(得分:1)

newList->名称从未被分配过。

答案 2 :(得分:1)

为了在将来始终如一地避免此类问题,我建议使用断言:

assert(newList);
assert(newList->Name);

答案 3 :(得分:1)

您的代码中存在一个问题。

printf("%s\n", &fC);

你应该把它改成

printf("%s\n", fC);

我认为你不太清楚地理解C指针。 & fC与fC非常不同,你可以通过"%p"来打印它。看到它。

printf("fC %p, &fC %p\n", fC, &fC);

& fC是fC的地址, fC是" + abc"的字符串的地址。 我希望它可以帮到你,但我建议你读一些书,学习C指针。

答案 4 :(得分:0)

printf("%s\n", &fC);

错了,你可能意味着

printf("%s\n", fC);