难以在unsigned char(struct element)中复制char *

时间:2017-03-25 20:53:20

标签: c struct casting

我找不到任何问题的解决方案,我认为这很容易,但不适合我。 我的第二个strcpy不起作用,如何将word2放入var2

/* struct */
struct StructName {
    char var1[15];
    unsigned char var2;
};
/*main*/
int main(void) {
    char *word1;
    char *word2;
    struct StructName Name;
    char line[] = "abc=12 xxxxxxxxx";
    word1 = strtok(line, " "); 
    word1 = strtok(word1, "=");
    word2 = strtok(NULL, "=");
    if ((strcmp(word1, "abc"))==0) {
        strcpy(Name.var1, word1);
        printf("%s", Name.var1);
        strcpy(Name.var2,(unsigned char)word2);
        printf("%d", Name.var2);
    }
    return 0;
}

4 个答案:

答案 0 :(得分:1)

您是否听说过stdlib.h中的函数int atoi(const char*)?尝试使用它将您的字符串转换为int,然后将该int转换为unsigned char。

编辑:只有在您尝试从line中提取数字12时才这样做,这是我认为您正在尝试做的事情。

答案 1 :(得分:0)

问题不明确,但是如果要将word2转换为Name.var2,可以按照以下步骤操作。 首先,您可以将char指针转换为int,然后将整数的地址作为unsigned char指针。

/*main*/
int main(void) {
    char *word1;
    char *word2;
    int number = 0;
    struct StructName Name;
    char line[] = "abc=12 xxxxxxxxx";
    word1 = strtok(line, " "); 
    word1 = strtok(word1, "=");
    word2 = strtok(NULL, "=");
    if ((strcmp(word1, "abc"))==0) {
        strcpy(Name.var1, word1);
        printf("%s", Name.var1);
        number = atoi(word2);
        Name.var2 = *(unsigned char*)&number;
    }
    return 0;
}

为atoi函数包含stdlib库。无符号字符大小和整​​数大小不匹配。因此,您的输入应与字符大小兼容。

答案 2 :(得分:0)

是的,我的目标是将号码12复制到unsigned char中。 功能atoi效果很好, 我试试这个看似有效。

if ((strcmp(word1, "abc"))==0) {
    strcpy(Name.var1, word1);
    printf("%s", Name.var1);
    Name.var2=(unsigned char)atoi(word2);
    printf("%d", Name.var2);
}

他们与GürtaçKadem的主张有何不同?

再次感谢! Brodbeni

答案 3 :(得分:-1)

奥拉夫认为将指针放入角色是一个坏主意,好吧,如果它有用,这将是一个非常好的主意 - 它会节省大量内存。

不幸的是,它不会起作用。它的点(呃)较少,并且在任何情况下都不适合,除非你的CPU只有256字节或更少的RAM :(