#include<stdio.h> char *strc(char *s1,char *s2) { char *p=s1; while (*s2!='\0') { *p++=*s2++; } return s1; } int main(void) { char s1[30]="computer OK!",s2[]="language",*pt; pt=strc(s1,s2); printf("%s\n",pt); }
时间: 2024-03-07 08:52:49 浏览: 164
这段代码的作用是在字符串s1的末尾添加字符串s2,并返回s1的地址。具体实现是通过指针p指向s1的首地址,然后遍历字符串s2,依次将其字符赋值给p所指向的地址,同时p不断向后移动,直到遍历完s2。最后返回s1的地址。
在这个具体的例子中,s1的初始值为"computer OK!",s2的值为"language",执行strc函数后,s1的值变为"computer OK!language",并且返回s1的地址。最终输出的就是s1的值"computer OK!language"。
相关问题
#include <stdio.h> #include <string.h> void fun(char *w,int n) { char t,*s1,*s2; sl=w;s2=w+n-1 while(s]<s2) {t=*sl++:*s1=*s2- *s2=t; int main() { char a[10]="1234567"; char *p=a; fun(p,strlen(P)); puts(p); return 0;
这是一段 C 语言的代码。该代码定义了一个函数 `fun`,该函数的作用是将字符串翻转。具体来说,该函数的输入参数为一个字符串指针 `w` 和字符串的长度 `n`,函数会将字符串中的字符顺序翻转。该函数内部定义了三个变量,分别是字符变量 `t` 和字符指针变量 `s1` 和 `s2`。接着是一个 while 循环,该循环的条件是 `s1 < s2`,循环内部将 `s1` 和 `s2` 所指向的字符交换,直到 `s1` 和 `s2` 相遇。最后,该代码定义了一个 `main` 函数,该函数声明了一个字符串数组 `a` 并初始化,然后调用 `fun` 函数翻转字符串,并输出翻转后的结果。
需要注意的是,该代码有一些语法错误。第一处是在 `fun` 函数内部,`sl` 变量应该是 `s1`;第二处是在 `while` 循环内部,应该使用 `++s1` 和 `--s2` 分别使 `s1` 和 `s2` 指向下一个字符。此外,`main` 函数中的 `strlen(P)` 应该是 `strlen(p)`。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
void fun(char *w, int n) {
char t, *s1, *s2;
s1 = w;
s2 = w + n - 1;
while (s1 < s2) {
t = *s1;
*s1 = *s2;
*s2 = t;
++s1;
--s2;
}
}
int main() {
char a[10] = "1234567";
char *p = a;
fun(p, strlen(p));
puts(p);
return 0;
}
```
该程序的输出结果为 `7654321`,即将原字符串 `1234567` 翻转后的结果。
#include<stdio.h> char *pstract (char*,char*); int main(void) { char s1[10]={'a','b','c','d'}; char s2[2]={'e','f'}; char *w; w = pstract(s1,s2); printf("%s",w); return 0; } char *pstract(char *s1,char *s2) { int n; char *p = s1; char *q = s2; n = sizeof(s1)/sizeof(char); p += n-1; while(*q != '\0') { *p = *q; p++; q++; } *++q='\0'; return s1; }
这段代码的功能是将字符串 s2 追加到字符串 s1 的末尾,并返回 s1 的首地址。但是有几个问题需要注意:
1. s1 的长度应该至少为 7,因为 s2 的长度为 2,加上 s1 的最后一个元素需要留给字符串结束符 '\0',所以至少要预留 3 个位置。
2. 在函数中计算 s1 的长度应该使用 strlen 函数来获取字符串的实际长度,而不是使用 sizeof 函数获取数组的大小。
3. 在追加完 s2 后,需要手动在 s1 的末尾添加结束符 '\0',而不是在 s2 的末尾添加。
4. 在返回 s1 的首地址时,应该返回指针变量 p,而不是 s1。因为 p 已经指向了 s1 的末尾。
修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
char *pstract(char*, char*);
int main(void) {
char s1[10] = "abcd";
char s2[2] = "ef";
char *w = pstract(s1, s2);
printf("%s", w);
return 0;
}
char *pstract(char *s1, char *s2) {
int n = strlen(s1);
char *p = s1 + n;
char *q = s2;
while (*q != '\0') {
*p++ = *q++;
}
*p = '\0';
return s1;
}
```
阅读全文