我有一個函數有兩個問題,一個非常阻礙,另一個不太那樣。分配內存到char指針
我正在學習C的過程中,爲了便於閱讀,main和findWord函數應該將隨機選擇的單詞從.txt文件存儲到'wordToGuess'中。
findWord將單詞存儲到指針'wordToGuess'中就好了,但我似乎無法從函數中將其提取出來以便在main中使用它。我試着讓函數成爲'void'並直接修改函數中的'wordToGuess',並將其作爲char *返回,然後被main使用,無濟於事。在這兩種情況下,int * wordLength都沒有問題,這讓我認爲這個問題不是來自於對指針或內存分配的潛在誤解。
另一個不太重要的問題是免費(wordToFind)以某種方式崩潰了整個事情,但我並沒有對這個問題感到擔憂。
感謝您的任何幫助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#define MIN 0
#define MAX 10
#define WORDSIZE 40
char* findWord(char *wordToGuess , int *wordLength);
int main(int argc , char *argv[])
{
int *wordLength = NULL , lengthWord = 0;
char *wordToGuess = NULL ;
srand(time(NULL)); // For rand() in findWord
wordLength = &lengthWord;
printf("\n1: %s\n" , findWord(wordToGuess , wordLength); // Sole purpose of this tester printf is to verify findWord function
return 0;
}
char* findWord(char *wordToGuess , int *wordLength)
{
int wordNumber = 0 , i = 0;
char word[WORDSIZE] = {0};
FILE *wordFile = NULL;
wordFile = fopen("words.txt" , "r");
if(wordFile != NULL)
{
wordNumber = (rand() % (MAX - MIN + 1)) + MIN; // Random number to choose word form words.txt
for(i = 0 ; i < wordNumber ; i++)
{
while(fgetc(wordFile) != '\n'); // Move the cursor to line 'wordNumber'
}
fgets(word , WORDSIZE , wordFile); // Get word from that line
}
*wordLength = strlen(word);
wordToGuess = malloc(*wordLength * sizeof(char));
if(wordToGuess == NULL)
exit(0);
wordToGuess = word;
fclose(wordFile);
// free(wordToGuess);
return wordToGuess;
}
'wordToGuess = word;'或'strcpy()'?你想要什麼? – 2014-12-02 14:24:09
首先,'strlen'不包含終止'null'字節。而真正的問題是'wordToGuess = word',你正在爲你的指針分配一個局部變量的地址。你應該使用'memcpy'。 – 2014-12-02 14:28:01
我覺得這張海報比他能咀嚼的東西還要多。在您嘗試解決這種規模的練習之前,您需要使用更小的程序來學習C語言中指針和內存管理的基礎知識。 – 2014-12-02 14:55:09