gpt4 book ai didi

c - 双指针在数组中被神秘地修改

转载 作者:行者123 更新时间:2023-11-30 20:21:16 25 4
gpt4 key购买 nike

你好,我有一个函数,它填充一个由单词组成的二维数组。我想简单地返回我输入函数的指针的值,但由于某种原因,指针现在指向其他东西,很奇怪。我想知道如何解决这个问题。另外,是否可以通过指针算术来解决这个问题?(这不是我想做的,我想看看问题是什么并以这种方式解决它,但无论如何知道它会很高兴)。所以它应该是一个 500 x 5 数组,即使我将字符串分配给“dictPointer[i]”,我认为它应该代表“*dictPointer”而不是“dictPointer”,但似乎我不应该有问题。我需要它是这样的,因为我想从初始指针值开始打印单词。另请注意,dictPointer 是一个指向指针的指针(**dictPointer)

char** readAndPopulateArray(FILE *f, char *fileName, char **dictPointer, int x ) { // x represents the number of words 
// point is the word pointer
int i = 0;
char tempStr[80];
char ch;
f = fopen(fileName, "r");
if ( f == NULL ) {
printf("Cannot open %s. Verify it's in the right location\n", fileName);
}

while (fscanf(f, "%s", tempStr) == 1 ) {
if( strlen(tempStr) == 4 ) {
if(i == 0 ) {
printf("Entering dictpointer points to %p\n", *dictPointer);
}
dictPointer[i] = tempStr;
if ( i == 499 ) {
printf("Exiting dictPointer points to %p\n", *dictPointer);
}
}
i++;
}

return dictPointer;
}

下面是我如何为矩阵调用 malloc:

char** makeStringWordArray(int x, int letters ) { // x represents number of words, function stores one character each per word
// letters represents number of letters in each word
char *hold;
int i, j = 0;
char **dict = (char **)(malloc(x * sizeof(char*)) );
for (i = 0; i<x; i++ ) {
dict[i] = (char*)(malloc(letters*sizeof(char) + 1 ) );
}

return dict;
}

最佳答案

您将每个dictPointer[i]分配给同一个指针tempStr。那么 tempStr 的生命周期在 readAndPopulateArray 结束时结束,使得 dictPointer[i] 无效。

也许你的意思是

strcpy(dictPointer[i], tempStr);

关于c - 双指针在数组中被神秘地修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com