#include<stdio.h>
# define words 10
char GET(char* st, int n,char* ma);
int main() {
char ch[words];
char str[words];
fgets(ch, words, stdin);
GET(ch,words,str);
fputs(str, stdout);
}
char GET(char* st, int n,char* ma) {
for (st; *st!=' '; st++) {
*ma = *st;
ma++;
}
return 0;
}

有两个原因:一是复制完成,ma结尾没加空字符,二是第13行的 *st!=' ' 没有改为第13行的 *st!='\0';
如果是要复制字符数组ch 里空格之前的字符,复制完成,在ma存储的字符结尾需要添加一个结尾的空字符即可;
但如果是要复制数组ch中全部的字符串到ma,还需要将第13行的 *st!=' ' 改为 *st!='\0'。
修改如下:
#include<stdio.h>
# define words 10
char GET(char* st, int n,char* ma);
int main() {
char ch[words];
char str[words];
fgets(ch, words, stdin);
GET(ch,words,str);
fputs(str, stdout);
}
char GET(char* st, int n,char* ma) {
// 如果是要实现复制全部字符串的话,下面的*st!=' '改为 *st!='\0'即可
for (st; *st!=' '; st++) {
*ma = *st;
ma++;
}
*ma='\0'; // 添加字符串结尾的空字符'\0'
return 0;
}
你这代码各种指针越界
#include<stdio.h>
# define words 10
char GET(char* st, int n,char* ma);
int main() {
char ch[words];
char str[words];
fgets(ch, words, stdin);
GET(ch,words,str);
fputs(str, stdout);
}
char GET(char* st, int n,char* ma) {
for (; *st!=0; st++) {
*ma = *st;
ma++;
}
*ma=0;
return 0;
}
代码问题较多,直接看修改后的结果吧,支持中文输出
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#define words 10
void GET(wchar_t *st, int n, wchar_t *ma);
int main()
{
setlocale(LC_ALL, ""); // 设置本地化环境,支持中文字符
wchar_t ch[words];
wchar_t str[words];
fgetws(ch, words - 1, stdin);
GET(ch, words, str);
fputws(str, stdout);
return 0;
}
void GET(wchar_t *st, int n, wchar_t *ma)
{
for (st = st; *st != L' ' && *st != L'\0'; st++)
{
*ma = *st;
ma++;
}
*ma = L'\0';
}
不知道你这个问题是否已经解决, 如果还没有解决的话:https://www.bilibili.com/video/BV1d4411v7u7?p=1
https://www.bilibili.com/video/BV1N741177F5?p=1