gpt4 book ai didi

c - C中指针数组的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:35 24 4
gpt4 key购买 nike

我正在尝试测试“Pointers On C”中的一些代码,find_char 函数,它搜索指定的字符。我添加了一些我自己的东西,即调用 find_char 并包含要搜索的初始化数据(指向 char 的指针数组)的 main() 函数。我设法在编译时修复了所有错误和警告,但在尝试运行 a.out 文件时,我遇到了段错误。

我知道段错误主要与数组和指针有关,当类型被错误翻译时经常发生这种情况。但是我真的找不到我的代码有什么问题。

非常感谢。

#include <stdio.h>
#define TRUE 1
#define FALSE 0

int find_char( char **strings, char value);

int main(void)
{
int i;
char c = 'z';
char *pps[] = {
"hello there",
"good morning",
"how are you"
};
i = find_char(pps, c);
printf("%d\n", i);
return 0;
}

int find_char (char **strings, char value)
{
char *string;
while (( string = *strings++) != NULL)
{
while (*string != '\0')
{
if( *string++ == value )
return TRUE;
}
}
return FALSE;
}

最佳答案

好吧,您的问题来自外部 while 循环。它遍历数组中的字符串,直到找到 NULL 字符串。但是,您没有用这样的字符串终止数组,因此循环将在第 3 个字符串之后继续并最终尝试访问它不应该访问的内存。

您的问题的解决方案:您可以通过给它一个 size 参数来修改您的函数的签名,这样它就变成了

int find_char(const **char strs, int size, char ch);

然后你需要在循环过程中包含这个大小值来找到你的停止条件。

char *s = NULL;
int i = 0;
while (i++ < size && (s = *strs++)) {
// ...
}

这里要记住的一点是,在 C 编程中需要小心使用内存和数组。在处理数组时,通常希望将数组的大小作为参数传递给每个处理函数。

希望对您有所帮助。

关于c - C中指针数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452105/

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