sprintf(tmpStr,"%s %s", title,board); for(i = 0; i < CHARMAXNUM; ++i) { assem[i] = ' '; } for(i = 0; i < CHARMAXNUM; ++i) { if(*(tmpStr + i) == 0) { break; } assem[i] = *(tmpStr + i); }优化这段代码
时间: 2023-07-14 22:03:29 浏览: 128
以下是对给定代码进行优化的建议:
```c
#include <stdio.h>
#include <string.h>
#define CHARMAXNUM 100
void copyString(char* dest, const char* src, size_t maxSize) {
size_t i;
for (i = 0; i < maxSize; ++i) {
if (src[i] == 0) {
break;
}
dest[i] = src[i];
}
}
int main(void) {
char tmpStr[CHARMAXNUM];
char assem[CHARMAXNUM];
// 初始化 assem 数组
memset(assem, ' ', sizeof(assem));
const char* title = "Hello";
const char* board = "World";
sprintf(tmpStr, "%s %s", title, board);
copyString(assem, tmpStr, sizeof(assem));
return 0;
}
```
**优化解释:**
1. 引入 `copyString` 函数:创建一个函数 `copyString`,用于将字符串从源地址复制到目标地址,直到遇到空字符或达到最大大小限制。
2. 使用 `memset` 初始化 `assem` 数组:在开始之前,使用 `memset` 函数将 `assem` 数组中的所有元素都初始化为空格字符。
3. 移除多余的循环:不再需要两个循环来将字符串复制到 `assem` 数组中。使用 `copyString` 函数来代替这两个循环。
4. 使用 `sizeof` 获取数组大小:在调用 `copyString` 函数时,使用 `sizeof(assem)` 来获取 `assem` 数组的大小,而不是硬编码的 `CHARMAXNUM`。
5. 使用 `const char*` 来存储字符串:将 `title` 和 `board` 定义为 `const char*` 类型的指针,以便在 `sprintf` 函数中使用。
通过这些优化,代码更加简洁和可读,并且避免了不必要的循环。此外,使用 `memset` 和 `sizeof` 来初始化和获取数组大小可以使代码更加健壮和可维护。
阅读全文