3

从 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;

当这个结构被传递给另一个结构时,除了字符串之外的所有内容都会正确显示。

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 始终打印为 ??_?

4

4 回答 4

6

使用strdup()(通常可用,如果不使用malloc())复制由 读入的label字符串sscanf()

detect.REF_OR_SYS = strdup(label);

当该函数返回时label超出范围REF_OR_SYS并将成为悬空指针。free()不再需要时记住它。

于 2012-06-04T15:05:01.483 回答
4

假设label是一个本地字符数组,您将返回一个指向函数本地存储的指针,该指针在函数退出时变为无效指针。

你可能需要

char REF_OR_SYS[32];

或者使用malloc()(或者strdup()如果你有它)动态分配字符串。

于 2012-06-04T15:02:59.750 回答
1

尝试定义一个数组

typedef struct box{
    char REF_OR_SYS[20]; int num, x, y, w, h, o;
}BOX;
于 2012-06-04T15:04:52.563 回答
1
typedef struct box{
    char REF_OR_SYS[N]; int num, x, y, w, h, o;
} BOX;

其中 N 是所需的长度(一个常数)和

strcpy(detect.REF_OR_SYS, label);
于 2012-06-04T15:07:23.307 回答