读书人

有个关于二维数组的有关问题请各位大

发布时间: 2013-04-07 12:50:11 作者: rapoo

有个关于二维数组的问题,请各位大神帮忙
本帖最后由 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]是一个数组,你应该传&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;
}

读书人网 >C语言

热点推荐