gpt4 book ai didi

c - 指针在 C 函数中的工作原理 - 无需强制转换的指向整数的指针

转载 作者:行者123 更新时间:2023-11-30 15:17:32 26 4
gpt4 key购买 nike

我目前正在为即将到来的考试练习使用指针,并正在做一些练习题来温习它们。我想使用给定的函数签名制作我自己的 strrchr 函数版本:

char* mystrrchr(char*s, int c) {

主字段:

int main(void) { 
char* s = "ENCE260";
char* foundAt = mystrrchr(s, 'E');
if (foundAt == NULL) {
puts("Not found");
}
else {
printf("%zd\n", foundAt - s);
}
}

我希望代码能够在不对 main 和函数签名进行任何更改的情况下工作。

我想以整数形式返回字符 c 最后一次出现在字符串 s 中的索引。代码的要点很好,我只是不确定在这种情况下如何正确使用指针来返回所需的输出。作为引用,我收到的错误是我正在从整数创建指针而不进行强制转换。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
#include <assert.h>

char* mystrrchr(char*s, int c) {
int position;
int len = strlen(s);
int i = 0;
while (i < len) {
if (c == s[i]) {
position = i;
i++;
}
else {
i++;
}
}
return position;
}

int main(void) {
char* s = "ENCE260";
char* foundAt = mystrrchr(s, 'E');
if (foundAt == NULL) {
puts("Not found");
}
else {
printf("%zd\n", foundAt - s);
}
}

这是我迄今为止的代码。

最佳答案

首先你可以改变

char*mystrrchr(char*s, int c) { 
...
return position;
}

char*mystrrchr(char*s, int c) { 
...
return s + position;
}

因为第一个版本返回相对位置。

然后还需要初始化position:

char*mystrrchr(char*s, int c) { 
int position = -1;
...
}

如果没有找到任何内容,则返回NULL:

char*mystrrchr(char*s, int c) { 
int position = -1;
...
if(position == -1) return NULL;
else return s + position;
}

此时函数就可以正常工作了。
但是您可以通过使用来提高性能

while (s[i] != '\0')

而不是使用 strlen,正如 Jonathan Leffler 在评论中指出的那样。

关于c - 指针在 C 函数中的工作原理 - 无需强制转换的指向整数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32356022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com