编辑:我删除了内存分配声明并将 strlen(bufferPointer) 更改为 strlen(inputLine)。这似乎摆脱了我输出中的奇怪符号。
我正在尝试编写一种方法来删除字符串中的第一个单词,并返回删除的单词的 char 指针。因为删除了这个词,字符串的大小应该会减少。
我遇到了一个奇怪的输出,我不确定为什么。
我是 C 的新手,刚刚开始熟悉指针的概念,所以任何帮助将不胜感激!
//global variables
char inputLine[] = "Hello there, my name is bob";
char *bufferPointer = inputLine;
char *nextWord();
main (){
printf("%s\n", nextWord());
}
char *nextWord(){
//calling a method that returns the number of words bufferPointer holds
int numOfWords = nwords(bufferPointer);
char *tmp2;
//Allocate memory to newArray
char *newArray = malloc(sizeof(char)*strlen(bufferPointer));
//create backup array
char backup[strlen(bufferPointer)];
strncpy(backup, bufferPointer, strlen(bufferPointer));
backup[strlen(bufferPointer)] = '\0';
//assign newArray pointer to backup array
newArray = backup;
//allocate memory to token (returned variable)
char *token = malloc(sizeof(char)*strlen(bufferPointer));
token = strtok(newArray, " ");
char *tmp = strchr(bufferPointer, ' ');
//move pointer to next word
if (tmp != NULL){
tmp2 = tmp;
bufferPointer = tmp +1;
}
return token;
}
旧的输出是:
there,
my
?²p
??
?²p?
?²p?
新的输出是:
there,
my
name
is
bob
最佳答案
strlen()
只给出字符数,不包括空字符。您还需要为空字符分配内存。
关于c - 尝试返回 char 指针时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36255722/