首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有个关于二维数组的有关问题,请各位大神帮忙

2013-04-07 
有个关于二维数组的问题,请各位大神帮忙本帖最后由 changtai_0 于 2013-04-03 09:56:36 编辑//设计要求有

有个关于二维数组的问题,请各位大神帮忙
本帖最后由 changtai_0 于 2013-04-03 09:56:36 编辑

//设计要求有个字符串数组存储termid,每个id固定20位;

#define TERMID_LEN20//termid的字节数

typedef char TERMSTATUS[TERMID_LEN+1];

//用 TERMSTATUS* 表示 二维字符串数组;

//有两个函数关联到

int func1(int termcount,TERMSTATUS* terminal_id,int seqid){
  ……
  TERMSTATUS* termids;
  (TERMSTATUS*)malloc(termcount*sizeof(TERMSTATUS))
  formatalstr(terminal_id[0],TERMID_LEN,termids[0])
}

int formatalstr(char* value,int len,char* in){
sprintf(in,"%-*s",len,value);       //这个地方传进来value=null
in[len]='\0';
return 0;
}

//使用过程
TERMSTATUS terminal_id[2]={"12345","67890"};
//在这个位置用formatalstr(terminal_id[0],TERMID_LEN,terminal_id[0])是成功的
func1(2,terminal_id,1);

/*小弟初次用c语言,数组指针概念还很模糊,请个位大神帮忙
谢谢大家,急用啊!!!!!!!!
*/
二维数组 指针 字符串
[解决办法]
看上去好像笔试题哦。
[解决办法]
func1发完整看看?

  TERMSTATUS* termids;
  (TERMSTATUS*)malloc(termcount*sizeof(TERMSTATUS))
这两句不对吧,下面一句没分号而且分配的内存没有赋给任何变量,是不是这样?
  TERMSTATUS* termids = (TERMSTATUS*)malloc(termcount*sizeof(TERMSTATUS));
[解决办法]
引用:
func1里面比较多业务过程,跟问题没啥关联,我比较困惑为啥多传了一层就为NULL了?我调试的时候在func1里terminal_id还是可以在watch里看到值的啊。。。。非常困惑


个人感觉并非是多了一层的原因,因为外面传入的是数组,而func1里传入的是指针,可能是寻址错误。
供参考。
[解决办法]
int formatalstr(char* value,int len,char* in);的前置声明类型是否匹配?
[解决办法]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//设计要求有个字符串数组存储termid,每个id固定20位;

#define TERMID_LEN20//termid的字节数

typedef char TERMSTATUS[TERMID_LEN+1];

//用 TERMSTATUS* 表示 二维字符串数组;

//有两个函数关联到
int formatalstr(char* value,int len,char* in)
{
  //用sprintf可以,但用strncpy更好。
strncpy(in,value, len);
  in[len] = 0;
return 0;
}

int func1(int termcount,TERMSTATUS* terminal_id,int seqid){
  TERMSTATUS* termids=  (TERMSTATUS*)malloc(termcount*sizeof(TERMSTATUS));
  for(int i = 0; i < termcount; ++i)
  {
    formatalstr(terminal_id[i],TERMID_LEN,termids[i]);
  }   
   free(termids);
   return 0;
}


int main()
{

//使用过程
TERMSTATUS terminal_id[2]={"12345","67890"};
//在这个位置用formatalstr(terminal_id[0],TERMID_LEN,terminal_id[0])是成功的
func1(2,terminal_id,1);
}

[解决办法]
terminal_id[0]是一个数组,你应该传&terminal_id[0],
楼主能把TERMSTATUS定义发出来看下吗
[解决办法]
引用:

terminal_id[0]是一个数组,你应该传&amp;terminal_id[0],
楼主能把TERMSTATUS定义发出来看下吗
func1接收的就是一个字符串
TERMSTATUS定义一开始就有
[解决办法]
楼主看10楼。。。。
[解决办法]
引用:
引用:C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839#include <stdio.h>#include <stdlib.h>#include <string.h>//设计要求有个字符串数组存储termid,每个id固定……


请你贴上完整代码或者自己调试一下,不能从代码中看出value为0的事情。
[解决办法]
引用:
引用:引用:func1里面比较多业务过程,跟问题没啥关联,我比较困惑为啥多传了一层就为NULL了?我调试的时候在func1里terminal_id还是可以在watch里看到值的啊。。。。非常困惑

个人感觉并非是多了一层的原因,因为外面传入的是数组,而func1里传入的是指针,可能是寻址错误。
供参……


这个写个test不就好了,VC6.0 运行没有发现你说的NULL的问题。
下面是测试代码
#include <stdio.h>
#include <stdlib.h>
//设计要求有个字符串数组存储termid,每个id固定20位;

#define TERMID_LEN20//termid的字节数

typedef char TERMSTATUS[TERMID_LEN+1];

//用 TERMSTATUS* 表示 二维字符串数组;
int formatalstr(char* value,int len,char* in){
sprintf(in,"%-*s",len,value);       //这个地方传进来value=null
in[len]='\0';
return 0;
}
//有两个函数关联到

int func1(int termcount,TERMSTATUS* terminal_id,int seqid){
TERMSTATUS* termids = (TERMSTATUS*)malloc(termcount*sizeof(TERMSTATUS));
return formatalstr(terminal_id[0],TERMID_LEN,termids[0]);
}

int main() {
    //使用过程
TERMSTATUS terminal_id[2]={"12345","67890"};
//在这个位置用formatalstr(terminal_id[0],TERMID_LEN,terminal_id[0])是成功的
func1(2,terminal_id,1);
    return 0;
}

热点排行