char cust_sw_rev[100] = ""; const char substr = "-NETRANI_GENALL_PACK"; // 需要删除的子串 strcpy(cust_sw_rev, mob_sw_rev); char p = strstr(cust_sw_rev, substr); if (p!= NULL) { memmove(p, p + strlen(substr), strlen(p + strlen(substr)) + 1); // 删除子串 } int len = strlen(cust_sw_rev); if (len > 40) { cust_sw_rev[40] = '\0'; } /* char p = strrchr(mob_sw_rev, '-'); snprintf((char)cust_sw_rev, 22, "%s", (char*)mob_sw_rev); sprintf((char*)(cust_sw_rev+21), "%s", p); */ 使用上面代码修改参与编译,当前报错为: error: redefinition of 'len' with a different type: 'int' vs 'uint16' (aka 'unsigned short'),我们应该如何修改,请给出修改后的代码
时间: 2024-02-24 11:59:16 浏览: 90
在这段代码中,同样也存在重定义的问题。不仅是变量名`len`的类型问题,还有`substr`的类型问题。下面是修改后的代码:
```
char cust_sw_rev[100] = "";
const char* substr = "-NETRANI_GENALL_PACK"; // 需要删除的子串(改为指针类型)
strcpy(cust_sw_rev, mob_sw_rev);
char* p = strstr(cust_sw_rev, substr);
if (p != NULL) {
memmove(p, p + strlen(substr), strlen(p + strlen(substr)) + 1); // 删除子串
}
size_t len = strlen(cust_sw_rev); // 将int类型改为size_t类型
if (len > 40) {
cust_sw_rev[40] = '\0';
}
```
这样就解决了变量类型重定义的问题,同时还将`substr`的类型从`char`改为了指向`const char`类型的指针。
相关问题
NOTICE_TYPE cust_sw_rev[100] = ""; char *substr = "-NETRANI_GENALL_PACK"; // 需要删除的子串 strcpy(cust_sw_rev, mob_sw_rev); // 找到NETRANI_GENALL_PACK的位置 char* p = strstr(cust_sw_rev, substr); if (p!= NULL) { // 将NETRANI_GENALL_PACK及其后面的值删除 memmove(p, p + strlen(substr), strlen(p + strlen(substr)) + 1); // 删除子串 } 修改上述代码,编译报错,报错信息为error: passing 'const char [100]' to parameter of type 'char *' discards qualifiers
这个错误是因为 substr 变量被声明为 char* 类型,而参数类型是 const char* 类型,这两种类型是不兼容的。如果你想要传递 const char* 类型的参数,需要将 substr 变量的类型也改为 const char*。
下面是修改后的代码:
```
NOTICE_TYPE cust_sw_rev[100] = "";
const char *substr = "-NETRANI_GENALL_PACK"; // 需要删除的子串
strcpy(cust_sw_rev, mob_sw_rev);
// 找到NETRANI_GENALL_PACK的位置
char* p = strstr(cust_sw_rev, substr);
if (p != NULL) {
// 将NETRANI_GENALL_PACK及其后面的值删除
memmove(p, p + strlen(substr), strlen(p + strlen(substr)) + 1); // 删除子串
}
```
这样就可以避免编译错误了。
NOTICE_TYPE cust_sw_rev[100] = ""; char substr[] = "-NETRANI_GENALL_PACK"; // 需要删除的子串 strcpy(cust_sw_rev, mob_sw_rev); char* p = strstr(cust_sw_rev, substr); if (p!= NULL) { memmove(p, p + strlen(substr), strlen(p + strlen(substr)) + 1); // 删除子串 }error: passing 'const char [100]' to parameter of type 'char *' discards qualifiers
这个错误是因为在函数调用时传递了一个 const char[] 类型的参数给了一个需要 char* 类型参数的函数。const char[] 表示该参数是一个只读的字符数组,而 char* 表示该参数是一个可读写的字符指针。由于只读的数组不能被修改,因此不能将 const char[] 类型的参数传递给需要 char* 类型参数的函数。
要解决这个错误,需要将参数的类型从 const char[] 改为 char[],或者将函数的参数类型从 char* 改为 const char*。如果你确定函数不会修改该参数,你可以将函数的参数类型改为 const char*,这样就可以接受 const char[] 类型的参数了。
阅读全文