void fun(char *str) { char *p=str; int i=0; while(*p) {if(*p!=’ ’) str[i++]=*p; p++; } str[i]=’\0’; }
时间: 2024-01-30 09:03:41 浏览: 120
这是一个函数,函数名为 fun,参数为一个指向字符数组的指针 str。函数的功能是从 str 中删除空格,并将结果存储回 str 中。
函数内部定义了一个指向 str 的指针 p 和一个整型变量 i,初始值为 0。然后使用 while 循环遍历 str 中的每个字符,如果该字符不是空格,则将其存储到 str[i] 中,同时 i 加 1。最后在 str[i] 处添加一个字符串结束符 '\0',表示字符串的结尾。
需要注意的是,该函数会修改传入的参数 str,因此在调用该函数之前,需要确保该指针指向的内存空间是可写的。
相关问题
#include<stdio.h> #include<pthread.h> #include<unistd.h> void *deal_fun01(void *arg) { char *str = (char *)arg; int i = 0; while (str[i] != '\0') { printf("%c",str[i++]); fflush(stdout); sleep(1); } return NULL; } void *deal_fun02(void *arg) { char *str = (char *)arg; int i = 0; while (str[i] != '\0') { printf("%c",str[i++]); fflush(stdout); sleep(1); } return NULL; } int main(int argc,char const *argv[]) { pthread_t tid1,tid2; pthread_create(&tid1,NULL,deal_fun01,"hello"); pthread_create(&tid2,NULL,deal_fun02,"world"); pthread_join(tid1,NULL); pthread_join(tid2,NULL); return 0; }
这段代码使用了多线程技术,创建了两个线程分别输出 "hello" 和 "world"。具体解释如下:
1. 引入需要的头文件:stdio.h、pthread.h、unistd.h。
2. 定义两个线程处理函数 deal_fun01 和 deal_fun02,函数参数为 void* 类型的指针,指向一个字符串。
3. 使用 pthread_create() 函数创建线程,参数依次为:
- 线程 ID,类型为 pthread_t。
- 线程属性,通常为 NULL 表示使用默认属性。
- 线程处理函数的地址。
- 线程处理函数的参数。
4. 在主函数中使用 pthread_join() 函数等待线程结束,参数依次为:
- 线程 ID。
- 用于获取线程返回值的指针,通常为 NULL 表示不关心返回值。
5. 程序最后返回 0。
需要注意的是,printf() 函数和 fflush() 函数的作用是为了保证输出的字符不会被缓存而导致输出不及时。sleep() 函数的作用是为了控制每个字符输出的时间间隔。
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 **********/ }这串代码删除字符串中的空格有没有问题
这段代码存在问题。在第二个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` 指针直接修改原始字符串。
阅读全文