char * 变量却不能用%s print,为什么?

Fingter 2010-10-08 10:54:02

struct key
{
char *word;
int data;
} Key[]=
{
"a",10,
"b",11,
"c",8,
"d",8,
"f",8,
"g",8,
"h",8,
"i",8,
"j",8

};


int binsearch(char *word,struct key k[],int n)
{
int count;
int low,hight,mid;

low=0;
hight=n-1;

int i=0;
for(i=0;i<8;i++)
{
printf("%c\r\n",*(k++)->word);//为什么这里不可以用printf("%s\r\n
}
return 0;
//....
...全文
1042 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
d741963250 2010-10-09
  • 打赏
  • 举报
回复
貌似是能的。
arong1234 2010-10-09
  • 打赏
  • 举报
回复
人家没星号阿?这个星号貌似是你自己加的[Quote=引用 10 楼 dengxu11 的回复:]
printf("%c\r\n",*(k++)->word);//为什么这里不可以用printf("%s\r\n
printf("%s\r\n 把星号去掉
printf("%s\r\n",(k++)->word);
[/Quote]
旭子 2010-10-09
  • 打赏
  • 举报
回复
printf("%c\r\n",*(k++)->word);//为什么这里不可以用printf("%s\r\n
printf("%s\r\n 把星号去掉
printf("%s\r\n",(k++)->word);
赵4老师 2010-10-09
  • 打赏
  • 举报
回复
struct key
{
char word[2];
int data;
} Key[]=
{
"a",10,
"b",11,
"c",8,
"d",8,
"f",8,
"g",8,
"h",8,
"i",8,
"j",8

};

struct key
{
char word;
int data;
} Key[]=
{
'a',10,
'b',11,
'c',8,
'd',8,
'f',8,
'g',8,
'h',8,
'i',8,
'j',8

};


乐CC 2010-10-09
  • 打赏
  • 举报
回复
光有指针没有分配空间,就算赋值成功了也不一定能输出的
千杯不醉-sen 2010-10-09
  • 打赏
  • 举报
回复
ls各位说的很清楚了、、、
luoyefly 2010-10-09
  • 打赏
  • 举报
回复
*(k++)->word的结果已经不是一个指针,应该是一个字符变量,所以不能用s%。
将*号去掉变成(k++)->word就可以了。
旭子 2010-10-09
  • 打赏
  • 举报
回复
char * 只是一个地址而已,跟它后面的地址内容没有关系,不存在行和不行,这个 ->"内部编译器在编译的时候会自动加上一个'\0'" 位于全局 .text section
就算是
int v = 0xa7a4e5;
char *s = (char *)&v;
printf("%s\n", s);
它一样能打出一个中文“大”字,原因就是v的高8位是0
keanoz 2010-10-09
  • 打赏
  • 举报
回复
3楼10楼正解。
旭子 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 arong1234 的回复:]

光char*是不行的,%s要求的是以'\0'结尾的字符串,而char*不足以满足这个要求。如
char ch ='a';
&ch的类型就是char*,但是它就不是以'\0'结尾的
[/Quote]


"a",10,
"b",11,
"c",8,
"d",8,
"f",8,
"g",8,
"h",8,
"i",8,
"j",8
楼主用的是 "" 不是'' 编译器早就做了处理在字符串的结尾加了'\0'了
看汇编代码就知道了
lly212 2010-10-09
  • 打赏
  • 举报
回复
*(k++)->word

这个是字符串吗
旭子 2010-10-09
  • 打赏
  • 举报
回复

[Quote=引用 11 楼 arong1234 的回复:]

人家没星号阿?这个星号貌似是你自己加的引用 10 楼 dengxu11 的回复:
printf("%c\r\n",*(k++)->word);//为什么这里不可以用printf("%s\r\n
printf("%s\r\n 把星号去掉
printf("%s\r\n",(k++)->word);
[/Quote]


下面这是楼主的源话

int binsearch(char *word,struct key k[],int n)
{
int count;
int low,hight,mid;

low=0;
hight=n-1;

int i=0;
for(i=0;i<8;i++)
{
printf("%c\r\n",*(k++)->word);//为什么这里不可以用printf("%s\r\n
}
return 0;
//....


“printf("%c\r\n",*(k++)->word);//为什么这里不可以用printf("%s\r\n”
他意思是不是 printf("%s\r\n",*(k++)->word)?
我的意思是去掉星号OK?
guzl86 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 renzhewh 的回复:]

可以的
C/C++ code

for(i=0;i<8;i++)
{
printf("%s\n", Key[i].word);//lz为何不用i
}
[/Quote]
正解。。。。。
libinfei8848 2010-10-08
  • 打赏
  • 举报
回复
*(k++)->word
算下来不就是个char类型么
tangxianghenggood 2010-10-08
  • 打赏
  • 举报
回复
在c语言中 没有字符串string 类型的变量 供参考
renzhewh 2010-10-08
  • 打赏
  • 举报
回复
可以的

for(i=0;i<8;i++)
{
printf("%s\n", Key[i].word);//lz为何不用i
}
renzhewh 2010-10-08
  • 打赏
  • 举报
回复
可以的

for(i=0;i<8;i++)
{
printf("%s\n", Key[i].word);//lz为何不用i
}
liaozi 2010-10-08
  • 打赏
  • 举报
回复
#include<stdio.h>
struct key
{
char *word;
int data;
} Key[]=
{
"a",10,
"b",11,
"c",8,
"d",8,
"f",8,
"g",8,
"h",8,
"i",8,
"j",8

};


int binsearch(char *word,struct key k[],int n)
{
/* int count;
int low,hight,mid;

low=0;
hight=n-1;*/

int i=0;
for(i=0;i<8;i++)
{
printf("%s\r\n",(k++)->word);//也可以这样printf("%s\r\n",(*(k++)).word);
}
return 0;
} //....

int main()
{
char mm[20];
binsearch(mm,Key,2);
}

你犯了一个简单的错误.
arong1234 2010-10-08
  • 打赏
  • 举报
回复
光char*是不行的,%s要求的是以'\0'结尾的字符串,而char*不足以满足这个要求。如
char ch ='a';
&ch的类型就是char*,但是它就不是以'\0'结尾的
just334455 2010-10-08
  • 打赏
  • 举报
回复
个人愚见,,你的初值好像赋值赋的有问题!!!
char * word
怎么能指向一个''字符,即便使用也应该
word=(char *)malloc(sizeof(char));
* word='a';
(仅供参考)

70,006

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧