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)
答案 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);