我需要編寫一個將字符串分割爲單個單詞的函數。
我的第一個參數是一個字符串。我們假設字符串中的單詞由單個空格分隔,在第一個單詞之前或第二個單詞之後沒有空格。像空格這樣的標點符號就是一個單詞的一部分。我的第二個參數是一個整數的地址,其中函數給出了字符串中單詞數量的值。返回值是一個指針,指向包含句子中單個單詞的字符串數組的點。我需要從堆中分配內存,並在數組的每個索引中都有一個字。字符串是原始單詞的副本,而不是指針。這裏是我的代碼:來自分割字符串函數的分割錯誤
char** splitString(char theString[], int *arraySize) {
*arraySize = countSpaces(theString) + 1; //Points to the number of words in the string.
char** pointerToArrayOfStrings = malloc(*arraySize * sizeof(char *)); //Allocated memory for '*arraySize' character pointers
int characters = 0;
for (int i = 0; i < *arraySize; i++) {
while (theString[characters] != ' ' || theString[characters] != '\0') {
characters++;
}
characters++;
pointerToArrayOfStrings[i] = (char *)malloc(characters);
pointerToArrayOfStrings[i][characters] = '\0';
}
for (int word = 0; word < *arraySize; word++) {
int ch = 0;
while (ch < strlen(pointerToArrayOfStrings[word])) {
pointerToArrayOfStrings[word][ch] = theString[ch];
}
ch+=2;
}
return pointerToArrayOfStrings;
}
這是立即給我分段錯誤。我對指針非常陌生,所以我的方法是首先爲數組分配「numberOfWords」字符指針的內存量。然後我爲每個字符指針分配了相應單詞的大小。之後,我用原始字符串中的字符填充了插槽。我不知道我錯過了什麼。
您有無限循環在這裏:'而(theString [字符] = '' || theString [字符] =! '\ 0'!){' – dbush
大部分'pointerToArrayOfStrings [i] []'沒有在'strlen(pointerToArrayOfStrings [word])之前被賦值' – chux
'pointerToArrayOfStrings [i] =(char *)malloc(characters); pointerToArrayOfStrings [i] [characters] ='\ 0';'分配外部分配的內存。 – chux