char *fun(char *t) { char *p=t; return(p+strlen(t)/2); } int main( ) { char *str="abcdefgh"; str=fun(str); puts(str); return 0; }
时间: 2024-05-31 22:14:41 浏览: 93
这段代码的输出结果为 "defgh"。
首先,在主函数中定义了一个指向字符常量 "abcdefgh" 的指针 str。然后调用了函数 fun,将 str 作为参数传递给 fun 函数。
在 fun 函数中,首先定义了一个指针 p,将 t 的值赋给了 p。然后,使用 strlen 函数获取字符串 t 的长度,并除以 2,得到中间位置的下标。p + strlen(t)/2 的结果就是指向字符串 t 中间位置的指针。最后,fun 函数返回 p + strlen(t)/2,也就是指向字符串 t 中间位置的指针。
回到主函数,将 fun 函数的返回值赋给 str,也就是指向字符串 t 中间位置的指针。最后,使用 puts 函数输出 str 指向的字符串,也就是 "defgh"。
相关问题
#include<stdio.h> /********** Begin *********/ #include <string.h> void fun(char* s, char* d){ int len = strlen(s); for(int i = 0; i < len; i ++){ if(i % 2 == 1 || s[i] % 2 == 0){ *d++ = s[i]; } } d = '\0'; } /********** End *********/ int main() { char s[20], d[20]; scanf("%s",s); fun(s,d); puts(d); return 0; }这代码有问题吗
这段代码有一个问题,即在函数 `fun` 中,`d = '\0'` 应该改为 `*d = '\0'`,因为 `d` 是指向字符串的指针,需要使用 `*d` 来访问字符串中的元素。修改后的 `fun` 函数代码如下:
```
void fun(char* s, char* d) {
int len = strlen(s);
for(int i = 0; i < len; i ++) {
if(i % 2 == 1 || s[i] % 2 == 0) {
*d++ = s[i];
}
}
*d = '\0';
}
```
这样修改后,程序就可以正确运行了。
#include<conio.h>#include<stdio.h>#include<string.h> void fun(char s[],char t[]) I int i,k; k=strlen(s); /**********ERROR**********/ for(i=5;i<k;i++) t[i]=s[i]; for(i=5;i<k;i++) /**********ERROR****美*美*美*/ t[k+i]=s[k-i]; /**********ERROR**********/ t[k]='\0'; main(){ char s[150],t[156]; printf("\nPlease enter string s:");scanf("%s",s);/**********ERROR**********/ fun(s,t); printf("The result is:%s\n",t);
这段代码存在三处错误。第一处错误是函数fun没有正确的定义,应该为void fun(char s[], char t[])。第二处错误是在第7行的for循环中,应该使用i作为下标,而不是5。第三处错误是在第8行的for循环中,应该使用k-i-1作为下标,而不是k-i。改正后的代码如下:
```
#include <stdio.h>
#include <string.h>
void fun(char s[], char t[]) {
int i, k;
k = strlen(s);
for (i = 0; i < k; i++) {
if (i < 5) {
t[i] = s[i];
} else {
t[i] = s[k - i - 1];
}
}
t[k] = '\0';
}
int main() {
char s[150], t[156];
printf("\nPlease enter string s:");
scanf("%s", s);
fun(s, t);
printf("The result is:%s\n", t);
return 0;
}
```
阅读全文