将指针从strtok()
分配到包含在结构中的ptr
我有一个这些结构的二维数组,我想用来存储我试图从csv文件解析的数据。
typedef struct Entry
{
char *str;
} Entry;
我从
fgets()
获取输出,并通过我自己的函数TokenizeLine()
发送,以便将其拆分并分配到数组中的适当位置然而,我的2d数组(etable
)的每个条目中的每个指针最终都持有相同的值。下面的代码有什么问题?
fgets(currentLineStr, 8192, fileIn);
while (currentLineStr[0] == '#')
fgets(currentLineStr, 8192, fileIn);
TokenizeLine(currentLineStr, eTable, yIndex, x, y);
yIndex++;
while(fgets(currentLineStr, 8192, fileIn) != NULL)
{
TokenizeLine(currentLineStr, eTable, yIndex, x, y);
yIndex++;
}
void TokenizeLine(int x; int y; char currentLineStr[], Entry eTable[x][y], int yIndex, int x, int y)
{
char *tokPtr;
int xIndex = 0;
tokPtr = strtok(currentLineStr, "|");
while(tokPtr != NULL)
{
eTable[xIndex][yIndex].str = tokPtr;
tokPtr = strtok(NULL, "|");
xIndex++;
}
}
最佳答案
在您的代码中,所有的str
实际上都作为tokPtr
的占位符工作它们都只指向tokPtr
现在,在完成while()
循环之后,tokPtr
保存的最新值也将由所有str
s提交。
为了避免,你需要
为每个str
分配内存,可以使用malloc()
。
使用strcpy()
将tokPtr
的当前值复制到相应的str
中。
关于c - 将strtok的指针分配给结构的2d数组中的指针,所有条目都应该是唯一的,但要打印为相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31299474/