如何在C中用数组填充struct的指针元素

时间:2015-08-12 10:15:48

标签: c pointers struct

我有像这样的结构

struct tag{ char *pData};

我想在循环中填充此元素(pData)。

for(i=0; i<MAX; i++){
    myTag.pData = newData[i]; // question is here!
}

请帮帮我。

4 个答案:

答案 0 :(得分:2)

首先,你的 pData必须指向某个有效的缓冲区,如果它指向一个有效的缓冲区,你可以像这样填充它。

for(i=0; i<MAX; i++) {
    // Note that newData must be this same type or you have
    // to truncate whatever type you are writing there to char.
    myTag.pData[i] = newData[i];
}

如果你想在整个缓冲区中复制这个相同的值,我怀疑(但是你的代码暗示了这一点),只需使用 memset 标准库函数。

请在示例中指定您希望在此缓冲区中发生什么,并提供更多用例的上下文。看起来你是初学者,你可能需要比你提出的更多帮助,以使你的程序正常。

这里有一些工作代码示例,我觉得你想要,但你不知道如何询问它。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct tag{ char *pData; };

int main(void) {
    int i;
    struct tag myTag;
    myTag.pData = (char*)malloc(10*sizeof(char));
    if(NULL == myTag.pData) {
        return 0;
    }

    const char *test = "Hello";

    for(i=0; i<strlen(test); i++) {
        myTag.pData[i] = test[i];
    }

    // Put null termination at the end of string.
    myTag.pData[i] = '\0';

    printf("%s", myTag.pData);

    free(myTag.pData);

    return 0;
}

答案 1 :(得分:0)

如果您不尝试设置pData偏移量,请尝试使用*运算符,如下所示:

*(myTag.pData) = number;

更新这样,如果您只想在标记中填写一个值,如果要复制整个数组,请参阅其他答案。

答案 2 :(得分:0)

如果要将数组元素填充到pData中,请使用malloc分配内存,然后分配值。以下代码应该是有用的

myTag.pData=malloc(MAX*sizeof(char));
for(i=0; i<MAX; i++)
{
    myTag.pData[i] = newData[i];
}

您的代码中的错误是您尝试将char值分配给char指针。

上面的代码将为一个字符数组保留内存,并使myTag.pData指向该数组的第一个元素。然后,myTag.pData [i]可用于为数组的第i个元素赋值。

如果要复制字符串,则代码应为

myTag.pData=malloc((MAX+1)*sizeof(char));
for(i=0; i<MAX; i++)
{
    myTag.pData[i] = newData[i];
}
myTag.pData[MAX]='\0';

您还可以通过包含string.h头文件来使用库函数strcpy()。

myTag.pData=malloc((MAX+1)*sizeof(char));
strcpy(myTag.pData,newData);

答案 3 :(得分:0)

因为pDatachar *而没有为数据分配任何空间,如果您不需要保留数组newData的内容,则可以简单地指定给指针:

char newData[10];
myTag.pData = newData;

或者创建另一个数组填充它然后分配给指针。