C语言字符串删除:使用fgets()函数替代gets()并优化代码
#include <stdio.h>
#include <string.h>
void del(char *a, char *b, char *p) {
for (int i = 0, j; i < strlen(a); i++) {
if (&a[i] == p) {
for (j = i + strlen(b); j < strlen(a); j++) {
a[i] = a[j];
i++;
}
break;
}
}
return;
}
int main() {
char a[100], b[100];
char *p = NULL;
printf("输入字符串 a: ");
fgets(a, sizeof(a), stdin);
a[strcspn(a, "\n")] = '\0'; // 去除末尾的换行符
printf("输入字符串 b: ");
fgets(b, sizeof(b), stdin);
b[strcspn(b, "\n")] = '\0'; // 去除末尾的换行符
while (1) {
p = strstr(a, b);
if (p != NULL) {
del(a, b, p);
} else {
break;
}
}
printf("删除后的字符串 a: %s\n", a);
return 0;
}
代码优化说明:
-
使用
fgets()代替gets():gets()函数存在缓冲区溢出的安全风险,容易导致程序崩溃或被恶意攻击。fgets()函数可以指定读取的字符数,避免缓冲区溢出,提高代码安全性。
-
函数参数类型优化:
del()函数的参数类型由数组类型改为指针类型,提高代码的灵活性和可读性。
-
处理换行符:
fgets()函数会读取换行符,需要使用strcspn()函数去除字符串末尾的换行符,确保输出结果正确。
总结:
通过以上优化,代码更加安全、高效、易于理解和维护。 在实际开发中,应尽量避免使用 gets() 函数,并选择更安全的替代方案,如 fgets() 函数。
原文地址: https://www.cveoy.top/t/topic/mCiE 著作权归作者所有。请勿转载和采集!