void fun(char *str) { /**********Program**********/ char ss[81]; int i=0,j=0,count=0; while(str[i]!='\0') { if(str[i]!=' ') { count++; ss[j++]=str[i]; } i++; } while(count--){ str[i++]=ss[i++]; } /********** End **********/ }这串代码删除字符串中的空格有没有问题
时间: 2023-07-23 12:07:56 浏览: 54
这段代码存在问题。在第二个while循环中,当 `count` 减少到 0 时,`str[i++]` 和 `ss[i++]` 都会变成 `\0`,导致后面的字符串无法被正确拼接。此外,`str` 字符串的长度没有变化,超出原有长度的部分可能会被乱写,导致程序崩溃或出现其他问题。
以下是修正后的代码:
```c
void fun(char *str) {
char ss[81];
int i = 0, j = 0, count = 0;
while (str[i] != '\0') {
if (str[i] != ' ') {
count++;
ss[j++] = str[i];
}
i++;
}
ss[j] = '\0'; // 在 ss 数组末尾添加 '\0',使其成为一个以 '\0' 结尾的字符串
j = 0;
while (j <= count) { // 注意这里的条件
str[j] = ss[j];
j++;
}
}
```
修正后的代码在删除空格的同时,将结果存储到了新的数组 `ss` 中,而最后通过 `str` 指针直接修改原始字符串。
相关问题
C++ void*转char*
在C++中,void*是一种通用的指针类型,可以指向任意类型的数据。而char*是指向字符类型的指针。要将void*指针转换为char*指针,可以使用类型转换操作符进行强制类型转换。
下面是将void*指针转换为char*指针的示例代码:
```cpp
void* voidPtr = ...; // 假设voidPtr是一个void*指针
char* charPtr = static_cast<char*>(voidPtr); // 将void*指针转换为char*指针
```
需要注意的是,这种转换是一种类型不安全的操作,因为void*指针丢失了原始数据的类型信息。因此,在进行转换之前,需要确保原始数据的类型是char*或者可以安全地转换为char*类型。
void* 和char* 和int*
`void*`, `char*`, 和 `int*` 都是C/C++语言中的指针类型,但它们代表的数据类型和用途有所不同:
1. `void*`:这是一个通用指针类型,它并不指定特定的数据类型。当你声明一个`void*`指针时,它可以指向任何数据类型,无论是基本类型(如int, char)还是复杂类型(如结构体或类)。在实际操作中,`void*`通常用于动态内存分配(如`malloc`),或者是函数参数或返回值,当不确定具体类型时使用。
2. `char*`:这个类型的指针专门指向字符数组或单个字符。它常用于字符串处理,因为字符串在C语言中本质上就是一个字符数组。`char*`可以通过`&`操作符获取字符串的地址,也可以使用`strlen`函数计算字符串长度,或者用`strcpy`和`strcat`等函数进行字符串操作。
3. `int*`:这是整型指针,它指向的是一个整数。在程序中,你可以用它来传递整数变量的地址给函数,或者作为数组的元素指针。此外,`int*`可以用来遍历整数数组或者进行数学运算。