爲什麼我的功能printTable打印我的數組的內容?例如,從存儲在我的數組中的整個單詞'oui'它只打印'o'?指針和局部數組用C
#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;
}
普通的初學者錯誤PASS陣列。 'return mysteryWord;'。那是錯的。 'mysteryWord'是一個局部變量,當函數退出時超出範圍(不再有效)。在函數外部使用這種變量會導致未定義行爲。 – kaylum
感謝您的回答,我應該再使用它作爲一個全局變量或者是有沒有辦法只用指針來操作呢? –
你應該在返回之前製作它的副本(例如,用'strdup')。順便說一句,爲什麼你以這種奇怪的方式初始化字符串變量?您可以do'char wordLibrary [] =「非#OUI#魁#」;' – DyZ