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 16:59:16 浏览: 18
在这段代码中,同样也存在重定义的问题。不仅是变量名`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] = ""; 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); // 删除子串 } 发生保错,报错原因如下: error: passing 'const char [100]' to parameter of type 'char *' discards qualifiers
这个错误是因为你尝试修改了一个被声明为 `const` 的变量。在这个例子中,`substr` 被声明为 `const char *`,意味着它是一个指向常量字符的指针,不能被修改。而在 `memmove` 函数中,你将 `p` 指向的内存区域中的子串删除,这个内存区域实际上是 `cust_sw_rev` 数组中的一部分,而 `cust_sw_rev` 又被声明为 `NOTICE_TYPE cust_sw_rev[100] = "";`,这意味着它是一个字符数组,并且这个数组中的所有元素都是常量。因此,你需要将 `cust_sw_rev` 声明为可修改的字符数组,例如 `char cust_sw_rev[100] = "";`,这样才能在 `memmove` 函数中正确地修改它的值。