我需要编写一个将字符串分割为单个单词的函数。
我的第一个参数是一个字符串。我们假设字符串中的单词由单个空格分隔,在第一个单词之前或第二个单词之后没有空格。像空格这样的标点符号就是一个单词的一部分。我的第二个参数是一个整数的地址,其中函数给出了字符串中单词数量的值。返回值是一个指针,指向包含句子中单个单词的字符串数组的点。我需要从堆中分配内存,并在数组的每个索引中都有一个字。字符串是原始单词的副本,而不是指针。这里是我的代码:来自分割字符串函数的分割错误
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