c语言基础问题
```c#include<stdio.h>
#define N 50
char* Link(char *s,char *t)
{
char string;
int i = 0;
for (; *(s + i) != '\0'; i++)
{
string = *(s + i);
}
for (int j = i + 1,k = 0; *(t + i) != '\0'; j++, k++)
{
string = *(t + k);
}
return string;
}
int main()
{
char s = {'\0'}, t = { '\0' }, *string;
printf("Please input the first string:");
gets(s);
printf("Please input the second string:");
gets(t);
*string = Link(s, t);
printf("The linked string is:");
puts(string);
return 0;
}
```
![图片.png](data/attachment/forum/202302/06/205936q1tqoo0g1eg10mog.png)
功能是拼接两个字符串,但是最后打印出来是乱码,真是搞不懂哦 这是学校的作业吗 string = *(s + i);
槽点太多,让我们有请 @李恒道 char* Link(char *s,char *t)
{
char *string = (char *) malloc(strlen(s) + strlen(t));
int i = 0;
for (; *(s + i) != '\0'; i++)
{
string = *(s + i);
}
for (int j = 0; *(t + j) != '\0'; j++)
{
string = *(t + j);
}
return string;
}
可以试试这个
最好贴出来报错 int j = i + 1 这句错了吧,上面for循环结束的时候i已经是+1的状态了,再+1会造成中间跳过了一个字符,所以变乱码了。 本帖最后由 Vikrant 于 2023-2-7 02:24 编辑
童鞋,你的代码好像槽点有一点多欸~~
哈哈,不过不怕,我给你指出来( ´・・)ノ(._.`):
1. 也是我认为最大的一个槽点,你的Link函数返回了一个函数内部定义的字符串指针,这样指针直接虚空索敌了。建议使用全局指针(bushi) (划掉)……建议直接给函数传入目标指针。或者也可以给函数内部定义的指针使用static关键字,这样函数退出的时候就不会释放这部分内存啦~ 当然了,也可以给内部的指针使用malloc、calloc、realloc等函数动态分配的内存,但是!千万记住!一定要用完了以后释放掉!(这个是血的教训~( TロT)σ )
2. 你在main函数里定义了一个char *string,我知道你这里想定义一个char* ,但事实上数组名是指针,又套上一个指针定义,这里的类型是char** 。建议改成char string。
3. for (int j = i + 1,k = 0; *(t + i) != '\0'; j++, k++),这里面有什么问题呢?首先,应该是int j=i,不用+1。然后,你的循环判断条件是*(t + i)!='\0',这里面没有一个值会在循环时改变,这可能会死循环(你这里没有死循环时因为刚好*(t + i)=='\0'),这里应该是*(t + k)!='\0'
4. 呐,还有!字符串的末尾最好补上一个'\0',这样稳妥一点,虽然好像不加也没有出错欸ㄟ( ▔, ▔ )ㄏ……
下面是我改的代码,可以正常运行哦(* ̄3 ̄)╭
#include <stdio.h>
#define N 50
char *Link(char *s, char *t, char *string) {
int i = 0;
for (; *(s + i) != '\0'; i++) {
string = *(s + i);
}
int j = i;//既然你上面写外面,那我也这样写喽~ 绝对不是我想把j的作用域移出来。
for (int k = 0; *(t + k) != '\0'; j++, k++) {
string = *(t + k);
}
string = '\0';
}
int main() {
char s = {'\0'}, t = {'\0'}, string;
printf("Please input the first string:");
gets(s);
printf("Please input the second string:");
gets(t);
Link(s, t, string);
printf("The linked string is:");
puts(string);
return 0;
}
Vikrant 发表于 2023-2-7 01:54
童鞋,你的代码好像槽点有一点多欸~~
哈哈,不过不怕,我给你指出来( ´・・)ノ(._.`):
哥哥太强了叭{:4_86:}好扎实的基本功
页:
[1]