我正在尝试测试一些代码来自" Pointers On C",find_char函数,它搜索指定的字符。我添加了一些我自己的东西,即调用find_char的main()函数,包括要搜索的初始化数据(指向char的指针数组)。我设法在编译时修复所有错误和警告,但在尝试运行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;
}
答案 0 :(得分:2)
那么你的问题来自你的外部循环。它遍历数组中的字符串,直到找到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编程中,需要仔细使用内存和数组。在处理数组时,通常需要将数组的大小作为参数传递给每个处理函数。
我希望有所帮助。