我有像这样的结构
struct tag{ char *pData};
我想在循环中填充此元素(pData)。
for(i=0; i<MAX; i++){
myTag.pData = newData[i]; // question is here!
}
请帮帮我。
答案 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)
因为pData
是char *
而没有为数据分配任何空间,如果您不需要保留数组newData
的内容,则可以简单地指定给指针:
char newData[10];
myTag.pData = newData;
或者创建另一个数组填充它然后分配给指针。