返回字符串指针的函数对二维字符数组赋值问题

mcmay 2008-11-11 10:35:42
下面这个代码里报错说“Line 16 incompatible types in assignment”,我不知为什么会出这种问题,请各位指点,谢谢!

/* Two D array pointer assignment from string-returning functions*/

#include <stdio.h>

#define NAM 2
#define LEN 21

char * retinput(void);

int main(void){

char names[NAM][LEN];
int i;

for(i = 0; i < NAM; i++){
names[i] = retinput(); /*报错说这里的赋值类型不匹配*/
puts(names[i]);
}

puts("\nDone!");

getch();
return 0;
}

char * retinput(void){

char nameinput[LEN];
char * pname = nameinput;

printf("\nInput the name: ");

while(gets(pname) != NULL && pname[0] != '\n')
return pname;
}
...全文
268 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddweidong 2011-04-02
  • 打赏
  • 举报
回复
正在遇到过类似问题
void function(char* str[])
{
int i=0;
sprintf(str[i],"%d",i);
}

int main()
{
char * p[16];
function(p);
return 1;
}


编译没问题,运行时段错误,是在function里sprintf(str[i],"%d",i);执行后出错的
pingzi_1119 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mcmay 的回复:]
引用 2 楼 loveapple1 的回复:
names[i] = retinput(); /*报错说这里的赋值类型不匹配*/
这个有问题
函数应该返回字符,而不是指针


如果是返回字符那么函数的原型应该是“char retinput(char )”而非"char * retinput(char )”了,而且我在函数的定义中已经将单个字符收集到一个字符数组里封装成字符串了,但不知为何依然报错呢。
[/Quote]
up
loveapple1 2008-11-11
  • 打赏
  • 举报
回复
感觉是程序风格的问题,个人认为编程规范,格式化些好点
mcmay 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loveapple1 的回复:]
names[i] = retinput(); /*报错说这里的赋值类型不匹配*/
这个有问题
函数应该返回字符,而不是指针
[/Quote]

如果是返回字符那么函数的原型应该是“char retinput(char )”而非"char * retinput(char )”了,而且我在函数的定义中已经将单个字符收集到一个字符数组里封装成字符串了,但不知为何依然报错呢。
mcmay 2008-11-11
  • 打赏
  • 举报
回复
谢谢jillnicky,不过还是请各位讨论一下为什么会有那样的报错。
loveapple1 2008-11-11
  • 打赏
  • 举报
回复
names[i] = retinput(); /*报错说这里的赋值类型不匹配*/
这个有问题
函数应该返回字符,而不是指针
  • 打赏
  • 举报
回复
相当于字符串赋值,strcpy……

编译通过了,执行的结果不知道合不合要求……没看程序

/* Two D array pointer assignment from string-returning functions*/

#include <stdio.h>

#define NAM 2
#define LEN 21

char * retinput(void);

int main(void)
{

char names[NAM][LEN];
int i;

for(i = 0; i < NAM; i++)
{
// names[i] = retinput(); /*报错说这里的赋值类型不匹配*/
strcpy(names[i],retinput());
puts(names[i]);
}

puts("\nDone!");

getch();
return 0;
}

char *retinput(void)
{

char nameinput[LEN];
char *pname = nameinput;

printf("\nInput the name: ");

while(gets(pname) != NULL && pname[0] != '\n')
return pname;
}

69,382

社区成员

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

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