d友们帮忙改错

etgqqw 2010-08-10 01:17:50
不知道哪里出错了,各位帮帮我

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100

void init_array(char* a);
void caculate(char* a, char* b ,char* c);
void print_array_to_num(char* a);


int main(){
char a[MAX];
memset(a,0,MAX);
init_array(a);

printf("%s",a);
return 0;
}

void init_array(char* a)
{

char* temp=(char*)malloc(MAX);

printf("请输入第一个加数:\n");

gets(temp);
*a++ = strlen(temp);

while( (*temp)!='\0' )
{
*a++=*temp++;
}

free(temp);
}
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigniyan 2010-08-10
  • 打赏
  • 举报
回复
void init_array(char* a)
{

char* temp=(char*)malloc(MAX);

printf("请输入第一个加数:\n");

gets(temp);
*a++ = strlen(temp);//LZ这里不是多此一举嘛,先记录申请空间长度,然后又把输入的字符串一个一个赋值给a这个数组,你直接都输入到数组a中不行吗???

while( (*temp)!='\0' )
{
*a++=*temp++;
}

free(temp);
}

pigniyan 2010-08-10
  • 打赏
  • 举报
回复
void init_array(char* a)
{

char* temp=(char*)malloc(MAX);

printf("请输入第一个加数:\n");

gets(temp);
*a++ = strlen(temp);

while( (*temp)!='\0' )
{
*a++=*temp++;
}

free(temp);
}
等while循环结束后temp指针已经不是当初刚申请的那个地址了,这个时候free会有错的
char *p_temp=NULL;
p_temp=temp;
.
.
.
free(p_temp);
p_temp=NULL;
艾莎云 2010-08-10
  • 打赏
  • 举报
回复
gets(temp);
*a++ = strlen(temp);

while( (*temp)!='\0' )
{




在下觉得为何要写上gets(temp)?(*temp)!='\0'又是为何 这里应该要用上gets吧?!直接写我是没看到过
chjs0103 2010-08-10
  • 打赏
  • 举报
回复
*a++ = strlen(temp);这个肯定是不行的
数组a是字符串,strlen返回的类型是 size_t 类型,一般是无符号整形的,将一个整形赋给字符型。编译器一般会报错的。并且好像这个语句也没什么意思。不知道你这样赋值是为了什么?
brookmill 2010-08-10
  • 打赏
  • 举报
回复
其实根本不用这么绕, 直接gets(a)不就行了吗?
brookmill 2010-08-10
  • 打赏
  • 举报
回复
1. *a++ = strlen(temp); 这行没用,删掉
2. free(temp)的时候temp已经不断增加跑到字符串的最后了,不是最初malloc得到的值了,所以free的时候会出错。
char* temp=(char*)malloc(MAX);
char *p = temp;
......
free(p);
}
crosoli 2010-08-10
  • 打赏
  • 举报
回复
编译没错,不知道你要干什么.
*a++ = strlen(temp); //这句 窝特啊由发克应斗引????

69,371

社区成员

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

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