C ...中的结构打印字符串有问题
typedef struct box{
char *REF_OR_SYS; int num, x, y, w, h, o;
}BOX;
sscanf(str, "%s %d %d %d %d %d %d", &label, &refNum, &x, &y, &w, &h, &o);
BOX detect = {label, refNum, x, y, w, h, o};
printf("\nLABEL IS %s\n", detect.REF_OR_SYS); //Prints out the String correctly
//(Either the word REF or SYS)
return detect;
当这个结构被传递给另一个结构时,所有内容都显示在字符串的EXCEPT之外..
void printBox(BOX detect){
printf("Type: %s Ref: %d X: %d Y: %d W: %d H: %d O:%d\n",
detect.REF_OR_SYS, detect.num, detect.x,
detect.y, detect.w, detect.h, detect.o);
}
我错过了一些简单的东西吗? REF_OR_SYS始终打印为?? _?
答案 0 :(得分:6)
使用strdup()
(通常可用,如果不使用malloc()
)将label
的字符串复制到sscanf()
:
detect.REF_OR_SYS = strdup(label);
当该函数返回label
时超出范围,REF_OR_SYS
将成为悬空指针。
答案 1 :(得分:4)
假设label
是一个本地字符数组,则返回一个指向函数本地存储的指针,当函数退出时,该指针将变为无效指针。
您可能需要
char REF_OR_SYS[32];
或者使用malloc()
动态分配字符串(如果有的话,还是strdup()
)。
答案 2 :(得分:1)
尝试定义数组
typedef struct box{
char REF_OR_SYS[20]; int num, x, y, w, h, o;
}BOX;
答案 3 :(得分:1)
typedef struct box{
char REF_OR_SYS[N]; int num, x, y, w, h, o;
} BOX;
其中N是所需长度(常数)和
strcpy(detect.REF_OR_SYS, label);