承接昨天的帖子继续询问

zyzy577048814 2015-11-19 11:36:15
昨天的帖子http://bbs.csdn.net/topics/391860511
经过大神的帮助,我整理了整个程序如下
#include <stdio.h>
#include <stdlib.h>
#define LEN 64
#define M 3
#define N 3
char get_message(char *message2, int message1[M][N]);
int main(void)
{
int message1[M][N] = { { 1,1,1 },{ 0,0,0 },{ 0,0,0 } };
const char *message2 = "help";
message2 = get_message(message2, message1);
printf("%s", message2);
return 0;
}


char get_message(char *message2, int message1[M][N])
{
int i, j;
char *message = NULL;
message = (char *)malloc(sizeof(char) * LEN);
if (NULL == message) {
fprintf(stderr, "malloc error: %s\n", strerror(errno));
return 1;
}
memset(message, 0, LEN);
sprintf(message, "%s", message2);
//printf("%s", message);
for (i = 0;i < M;i++)
for (j = 0;j < N;j++)
{
sprintf(message, "%s%d",
message,
message1[i][j]);
}
//printf("%s", message);
return message;
free(message);
}

程序能够正常得到两个变量的合并值help100000000.
但是我有两个问题希望有人能解释一下。
第一个,子函数返回的是指针,那应该声明成char *get_message(char *message2, int message1[M][N])才对啊,为啥不加*也对?
第二个返回的值是一个char类型的,那我试了下把子函数名定义成int *get_message(char *message2, int message1[M][N])为什么输出的值也是正确的呢?希望有人能解释下。
...全文
194 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-11-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#define LEN    64
#define M 3
#define N 3
char *get_message(char *message2, int message1[M][N]);
int main(void)
{
    int message1[M][N] = { { 1,1,1 },{ 0,0,0 },{ 0,0,0 } };
    char *message2 = "help";
    message2 = get_message(message2, message1);
    printf("%s", message2);
    return 0;
}
char *get_message(char *message2, int message1[M][N]) {
    int i, j;
    static char message[LEN];
    char *p=message;
    p+=sprintf(p, "%s", message2);
    for (i = 0;i < M;i++)
        for (j = 0;j < N;j++)
        {
            p+=sprintf(p,"%d",message1[i][j]);
        }
    return message;
}
//help111000000
paschen 2015-11-19
  • 打赏
  • 举报
回复
返回char的话return message;这句会错误 返回char*的话return 1;这句会错误
fefe82 2015-11-19
  • 打赏
  • 举报
回复
不要询问为什么错误的程序可以得到期望的结果。 错误的程序可能得到任何结果。
fly_dragon_fly 2015-11-19
  • 打赏
  • 举报
回复
char *p=message;
p+=sprintf(p,"%s",message2);
for (i = 0;i < M;i++)
        for (j = 0;j < N;j++)
        {
            p +=sprintf(p, "%d",message1[i][j]);
        }
paschen 2015-11-19
  • 打赏
  • 举报
回复
引用 3 楼 zyzy577048814 的回复:
[quote=引用 2 楼 paschen 的回复:] 返回char的话return message;这句会错误 返回char*的话return 1;这句会错误
那无解了?[/quote] 不明白你函数要做什么,如果返回类型必须一致,如果想返回多个变量,可以通过函数参数实现返回
zyzy577048814 2015-11-19
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
返回char的话return message;这句会错误 返回char*的话return 1;这句会错误
那无解了?

70,020

社区成员

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

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