gpt4 book ai didi

c - C 中的指针和局部数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:52 25 4
gpt4 key购买 nike

为什么我的函数 printTable 不打印数组的内容?例如,从存储在我的数组 mysteryword 中的整个单词 'oui' 中,它只打印 'o'?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>

#define libraryDimension 12
char* getFirstElementPointerOfMysteryWord(void);
char getCarac(void);
void printTable(char*ptr,int dimension);

/* Main program*/
int main() {
//getCarac();
char *pointerForFirstElement = getFirstElementPointerOfMysteryWord();
int tableDimension = 3;
printTable(pointerForFirstElement, tableDimension);

return 0;
}

此函数旨在提供一个词的选择,它没有参数,它返回我的词数组的第一个元素的地址。

char *getFirstElementPointerOfMysteryWord(void) {
int randomNumbers[3] = {0};
char mysteryWord[4];
char wordLibrary[libraryDimension];
wordLibrary[0] = '#';
wordLibrary[1] = 'n';
wordLibrary[2] = 'o';
wordLibrary[3] = 'n';
wordLibrary[4] = '#';
wordLibrary[5] = 'o';
wordLibrary[6] = 'u';
wordLibrary[7] = 'i';
wordLibrary[8] = '#';
wordLibrary[9] = 'q';
wordLibrary[10] = 'u';
wordLibrary[11] = 'i';
wordLibrary[12] = '\0';

int j=0;
for (int i = 0; i<libraryDimension; i++) {
if(wordLibrary[i] == '#') {
randomNumbers[j] = i;
j++;
}
}

srand(time(NULL));
int index = rand() % 3;
int randomNumber = randomNumbers[index];
int k=0;
for (int i = randomNumber ; i< libraryDimension-1 ; i++) {
if(wordLibrary[randomNumber+k+1] == '#'){
break;
}
else{
mysteryWord[k] = wordLibrary[randomNumber+1+k];
k++;
}
}
return mysteryWord;
}

这是我的代码无法正常工作的部分。

void printTable(char *ptr,int dimension) {
for (int i = 0; i <dimension ; i++) {
printf("%c",*(ptr+i));
}

}

char getCarac(void){
char carac;
carac = getchar();
return carac;
}

最佳答案

当你在一个函数中声明一个变量时,它是在栈上分配的。当变量超出范围时,即函数结束时,变量消失(堆栈是函数的局部变量),因此通过返回数组的地址,您将返回一个不再存在的地址。

改为使用 malloc 在堆上分配存储空间

char *mysteryWord = malloc(4);

或者更好,在函数外部声明,然后将其传递给函数进行填充。

void getFirstElementPointerOfMysteryWord(char* mysterword, size_t maxLen)

关于c - C 中的指针和局部数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655093/

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