今天在用strsep函数(有一个是双指针类型的形参)的时候,我以为&数组名就是**(双指针类型的),但结果却不对。后来查了才知道,虽然数组名与&数组名的值是相同的,但是,他们的类型是不一样的。
char str[10];
str 的值为str[0]的地址值,类型为char *型
&str的值为数组的首地址,类型为char * [ ] 此处,两者的值是相同的。
str+1的值为str[1]的地址值,即指向下一个元素的地址,即str+1值为str[0]的地址加1.
&str+1的值为下一个数组的首地址,增加的值即为数组的大小,char为1个字节,所以数组大小为1*10=10,即&str+1值为str[0]的地址加10.
所以在使用的时候要注意指针的类型,值相同,类型不同也是不对的
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"contact.h"
int get_file_contact(Book book_head)
{
FILE *fp;
char str[100];
char *p;
char *s;
int num;
if((fp=fopen("./contact_file/contact.txt","r+"))==NULL)
{
printf("Cannot open file strike any key exit");
getchar();
exit(1);
}
while(!feof(fp))
{
num++;
fgets(str,sizeof(Contact),fp);
s=str;
int i;
Book contact=(Book)malloc(sizeof(Contact));
for(i=0;i<3;i++)
{
p=strsep(&s," ");
switch(i)
{
case 0:strcpy(contact->name,p);break;
case 1:strcpy(contact->phone,p);break;
case 2:strcpy(contact->address,p);break;
default:break;
}
}
insert_contact_sort(book_head,contact);
}
return num;
}
strsep函数char *strsep(char **stringp, const char *delim);
在使用strsep的时候如果要分割字符数组,要这样做
char str[10]="aa bb cc";
char *p;
p=str;
p=strsep(&p," ");