如何返回指向char数组中间某事的指针?
// Returns a pointer to the first occurrence of the given character in the
// given string.
const char* strchr(const char* string, char charToFind) {
for (int i = 0; i < strlen(string); i++) {
if (string[i] == charToFind) {
return string[i]; // <== THIS IS WRONG, How do I fix this?
}
}
return '\0';
}
答案 0 :(得分:5)
你可以这样做
return &string[i];
或者像这样:
return string+i;
这是一回事。
返回'\0'
,char
常量等于零,在逻辑上是不正确的:您应该为0
指针返回NULL
,或者如果您希望返回空C字符串,你可以返回一个指向本地 static 空字符串的指针,如下所示:
const char* strchr(const char* string, char charToFind) {
for (int i = 0; i < strlen(string); i++) {
...
}
// Not found - return an empty string:
static const char *empty = "";
return empty;
}
答案 1 :(得分:1)
如果你有一个指向字符串的指针,向它添加N将返回指向同一字符串部分的指针,从第N个字符开始(对于从零开始的计数)。
此外,最好为指针指向空字符串。
static const char* EMPTY_STRING = '\0';
const char* strchr(const char* string, char charToFind) {
for (int i = 0; i < strlen(string); i++) {
if (string[i] == charToFind) {
return string+i;
}
}
return EMPTY_STRING;
}
答案 2 :(得分:0)
正如@dasblinkenlight所提到的,&string[i]
或string + i
都适用于返回指向字符串中间的指针。正如@Oliver Matthews所说,如果找不到该字符,你应该返回NULL。可能超出了原始查询的范围,但出于性能原因,您可能希望避免调用strlen()
,并在扫描时检查字符串的结尾,如下所示:
const char* strchr(const char* string, char charToFind) {
for (int i = 0; string[i]; i++) { // Or you could say string[i] != '\0'
if (string[i] == charToFind) {
return string + i;
}
}
return NULL;
}