优化以下代码:void insertString() { int row, col; //行号.位数 char insstr[MAXLEN]; //待插入的字符串 char newstr [MAXLEN]; //插入后的字符串 char *myline; //目标行 interPosition(&row, &col); myline = buf[row]; printf("插入字符串:"); scanf("&s",insstr); /*指定行的字符串长度与插入的字符串 长度之和大于内存单元的最大字符数时,返回main()函数。*/ if(strlen(myline) + strlen(insstr) >= MAXLEN) return; sprintf (newstr, "%s%s",insstr, myline + col); strcpy (myline + col, newstr); printf("第&d行第&d个字符后插入\"&s\"\n", row, col, insstr); printf("&04d:8s\n", row, myline); }
时间: 2024-03-10 09:46:10 浏览: 108
String 优化
下面是对这段代码的优化:
1. 使用 fgets() 替换 scanf(),避免输入错误导致的程序崩溃。
2. 将字符串拼接操作改为使用 strncpy() 和 strncat(),避免内存溢出的风险。
3. 将 sprintf() 函数改为 snprintf() 函数,避免缓冲区溢出。
4. 添加错误处理代码,避免程序出现未知错误。
```c
void insertString() {
int row, col;
char insstr[MAXLEN];
char newstr[MAXLEN];
char *myline;
interPosition(&row, &col);
myline = buf[row];
printf("插入字符串:");
fgets(insstr, MAXLEN, stdin);
insstr[strcspn(insstr, "\n")] = '\0'; // 去掉输入字符串末尾的换行符
if (strlen(myline) + strlen(insstr) >= MAXLEN) {
printf("字符串长度超过最大限制!\n");
return;
}
strncpy(newstr, myline, col);
newstr[col] = '\0';
strncat(newstr, insstr, MAXLEN - strlen(newstr) - 1);
strncat(newstr, myline + col, MAXLEN - strlen(newstr) - 1);
if (snprintf(myline, MAXLEN, "%s", newstr) < 0) {
printf("字符串拼接失败!\n");
return;
}
printf("第%d行第%d个字符后插入\"%s\"\n", row, col, insstr);
printf("%04d:%s\n", row, myline);
}
```
阅读全文