gpt4 book ai didi

c - C 中的 Sub String 函数存在内存问题?

转载 作者:太空宇宙 更新时间:2023-11-04 07:41:19 26 4
gpt4 key购买 nike

我有这个 C 函数,它试图告诉我字符串中是否包含子字符串。

int sub_string(char parent [1000], char child [1000]){

int i;
i = 0;
int parent_size = (int) strlen(parent);
int child_size = (int) strlen(child);
char tempvar [child_size];

int res;
res = 1;

while(i<(parent_size - child_size + 1) && res != 0){

strncpy(tempvar, parent + i, child_size);

if(strcmp(tempvar, child)==0){
res = 0;
}
i++;

memset(tempvar, 0, child_size);
}

memset(tempvar, 0, sizeof(tempvar));
return res;
}

现在奇怪的是,当我传递一个字符串“HOME_DIR=/tmp/”和“HOME_DIR”时,它第一次返回 0,但在我再次调用该函数后,它返回 1,表示它没有找到了!!

我猜这是一个内存问题,但我不知道在哪里,我将不胜感激。

最佳答案

有什么理由不能使用 strstr 函数吗?否则,您应该在代码中清理一些东西。对于初学者,因为您将进入的数组的长度限制为 1000 个字符,您应该使用 strnlen 而不是 strlen,限制为 1000。您还应该创建,在开始复制到它之前应该将 tempvar 数组清零。如果 parent 不是 null 终止的,您可以在 while 循环中运行数组的末尾。我还建议使用 strncmp 并给出长度限制(通常,如果您使用的是 C 字符串库,则应该使用函数的“n”版本,即 strnlen 而不是 strlen,这样您就可以在操作上设置边界长度,这有助于保护代码中的缓冲区溢出和潜在安全漏洞)。

关于c - C 中的 Sub String 函数存在内存问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874826/

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