为什么会有警告呢~

chump345 2007-11-24 01:40:05
#include"stdio.h"
#include"conio.h"
#define N 4
void fun(char *m[]);
void main()
{int i,j;
char m[][N]={{"2354"},{"3444"},{"4343"},{"5434"}};
fun(m[N]);
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%c ",m[i][j]);
printf("\n");}
getch();}
void fun(char *m[])
{int i,j;
for(j=0;j<N;j++)
{m[0][j]='0';
m[N-1][j]='0';
}
for(i=1;i<N-1;i++)
{m[i][1]='0';
m[i][N-2]='0';
}
}

后面有个警告~fun(m[N])~指针转换后指向其它类型在main函数中
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
laurence-star 2007-11-24
  • 打赏
  • 举报
回复
#include"stdio.h"
#include"conio.h"

#define N 4 //表示所包含字符串的个数
void fun(char*,int);
void main()
{
int i;
char *m[N]={{"2354"},{"3444"},{"4343"},{"5434"}};

for(i=0;i<N;i++)
{
printf("%s ",m[i]);
printf("\n");
}
printf("\n*****************\n");
for(i=0;i<N;i++)
{
fun(m[i],i);
printf("%s ",m[i]);
printf("\n");
}
getch();
}

void fun(char* s,int i)
{
if(0 == i || N-1 == i)
{
while(*s && (*s++ = '0'));
/*while(*s != '\0')
{
*s = '0';
s++;
} */

}
else
{
*s++ = '0';
while(*s++);
*(s-2) = '0';
}
}
*************
运行结果:
2354
3444
4343
5434

*****************
0000
0440
0340
0000
_石头_ 2007-11-24
  • 打赏
  • 举报
回复
元素全部变成0
------------------------------
试试下面的代码:

#include<stdio.h>
#include<windows.h>

void fun(char *m, int m_len)
{
while(m_len--)
*m++='\0';

}

int main()
{
unsigned int len,i,j;
char m[4][5]={{"2354"},{"3444"},{"4343"},{"5434"}};
len=sizeof(m);
fun(&m[0][0],len);
for(i=0;i<4;i++)
for(j=0;j<5;j++)
printf("%#x, ",m[i][j]); /* '0'以%c形式输出,屏幕上看不到内容*/
system("pause");
return 0;
}
jiarusun000 2007-11-24
  • 打赏
  • 举报
回复
fun(m[N]); 相当于
fun("5434");
所以这里fun的形式参数实际上应该是count pointer,但是fun()的原型声明中形式参数是char *m[] 这样的话,编译器要负责类型转换.
chump345 2007-11-24
  • 打赏
  • 举报
回复
我需要实现的效果是将周边的元素全部变成0,该怎么改呢~
_石头_ 2007-11-24
  • 打赏
  • 举报
回复
首先一个很明显的错误
char m[][N]={{"2354"},{"3444"},{"4343"},{"5434"}};
你的N为4,而字符串"2354"需要5个char空间:'2','3','4','5','\0' 一共5个!

69,368

社区成员

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

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