c语言中字符数组中的空格

c语言中字符数组中的空格,c,arrays,string,char,C,Arrays,String,Char,如何在数组中的两个单词之间添加空格,我从用户那里收到两个单词他的名字,他的姓氏我需要它来将两个数组存储在一个数组中它们之间一个空格 这是我的密码 #include <stdio.h> int main() { char first_name[15], last_name[15] ,full_name[32]; int i=0,i2,first_name_length,last_name_length; printf("enter your first name

如何在数组中的两个单词之间添加空格,我从用户那里收到两个单词他的名字,他的姓氏我需要它来将两个数组存储在一个数组中它们之间一个空格

这是我的密码

#include <stdio.h>
int main()
{
    char first_name[15], last_name[15] ,full_name[32];
    int i=0,i2,first_name_length,last_name_length;
    printf("enter your first name\n");
    first_name_length = scanf("%s",first_name);
    printf("enter your last name\n");
    last_name_length = scanf("%s",last_name);
    for(i2 = 0;i2 < first_name_length;i2++){
        full_name[i] = first_name[i2];
        i++;
    }
    full_name[i++]=' ';
    for(i2 = 0;i2 < last_name_length;i2++){
        full_name[i] = last_name[i2];
        i++;
    }
    printf("%s",full_name);
    return 0;
}
它应该是:

name name
tom fox
编辑:

它应该是:

name name
tom fox
改变

您的for循环条件也不太正确:

for(i2 = 0;i2 < first_name_length;i2++){
for(i2=0;i2
更改

i++;
full_name[i]=' ';

您的for循环条件也不太正确:

for(i2 = 0;i2 < first_name_length;i2++){
for(i2=0;i2
在没有sprintf函数和指针的情况下重写

#include <stdio.h>
int main()
{
    char first_name[15], last_name[15] ,full_name[32];
    int src, dest;
    printf("enter your first name\n");
    scanf("%s",first_name);
    printf("enter your last name\n");
    scanf("%s",last_name);

    dest = 0;
    src = 0;
    while (first_name[src] != 0) full_name[dest++] = first_name[src++];
    full_name[dest++] = ' ';
    src = 0;
    while (last_name[src] != 0) full_name[dest++] = last_name[src++];
    full_name[dest] = 0
    printf("%s",full_name);
    return 0;
}
#包括
int main()
{
字符名[15],姓氏[15],全名[32];
int src,dest;
printf(“输入您的名字”);
scanf(“%s”,名字);
printf(“输入您的姓氏\n”);
scanf(“%s”,姓氏);
dest=0;
src=0;
而(名字[src]!=0)全名[dest++]=名字[src++];
全名[dest++]='';
src=0;
而(姓氏[src]!=0)全名[dest++]=姓氏[src++];
全名[dest]=0
printf(“%s”,全名);
返回0;
}

在没有sprintf函数和指针的情况下重写

#include <stdio.h>
int main()
{
    char first_name[15], last_name[15] ,full_name[32];
    int src, dest;
    printf("enter your first name\n");
    scanf("%s",first_name);
    printf("enter your last name\n");
    scanf("%s",last_name);

    dest = 0;
    src = 0;
    while (first_name[src] != 0) full_name[dest++] = first_name[src++];
    full_name[dest++] = ' ';
    src = 0;
    while (last_name[src] != 0) full_name[dest++] = last_name[src++];
    full_name[dest] = 0
    printf("%s",full_name);
    return 0;
}
#包括
int main()
{
字符名[15],姓氏[15],全名[32];
int src,dest;
printf(“输入您的名字”);
scanf(“%s”,名字);
printf(“输入您的姓氏\n”);
scanf(“%s”,姓氏);
dest=0;
src=0;
而(名字[src]!=0)全名[dest++]=名字[src++];
全名[dest++]='';
src=0;
而(姓氏[src]!=0)全名[dest++]=姓氏[src++];
全名[dest]=0
printf(“%s”,全名);
返回0;
}

scanf()的返回值是成功扫描的字段数,而不是某些字符串的长度

使用:

与姓氏相同


[编辑]

由于OP不想引入新函数(例如,甚至
strlen()
),所以使用
%n
查找长度。
%n
记录解析位置

if (1 != scanf("%14s%n",first_name, &first_name_length)) Handle_EOF_orNoInput();
或者艰难地找到长度

if (1 != scanf("%14s",first_name)) Handle_EOF_orNoInput();
for (first_name_length = 0; first_name[first_name_length]; first_name_length++);
[编辑2]

OP的最新版本不会终止字符串

full_name[i] = '\0';  // add this
printf("%s",full_name);

scanf()
的返回值是成功扫描的字段数,而不是某些字符串的长度

使用:

与姓氏相同


[编辑]

由于OP不想引入新函数(如偶数
strlen()
),请使用
%n
查找长度。
%n
记录解析位置

if (1 != scanf("%14s%n",first_name, &first_name_length)) Handle_EOF_orNoInput();
或者艰难地找到长度

if (1 != scanf("%14s",first_name)) Handle_EOF_orNoInput();
for (first_name_length = 0; first_name[first_name_length]; first_name_length++);
[编辑2]

OP的最新版本不会终止字符串

full_name[i] = '\0';  // add this
printf("%s",full_name);
函数scanf()不返回读入的字符数。相反,它返回读入的成功匹配数(或错误)。在您的运行中,scanf()返回1,因此您只能将第一个字符从名字和姓氏复制到全名

此外,您需要将全名初始化为全零,或者在复制完姓氏后nul终止它

此外,读取字符串的方式是危险的。您应该限制scanf()可以读取的字符数,否则它将溢出缓冲区并破坏内存(或者让黑客进来,等等):

或者更好:

#define STR(x) #x
#define SSTR(x) STR(x)
#define STR_FMT(x) "%" SSTR(x) "s"
#define FIRST_NAME_MAX_LEN 14

...

char first_name[FIRST_NAME_MAX_LEN + 1] = { 0 };

...

if (1 != scanf(STR_FMT(FIRST_NAME_MAX_LEN), first_name))
  ;  // TODO: handle unexpected input, EOF, error, etc.
函数scanf()不返回读入的字符数。相反,它返回读入的成功匹配数(或错误)。在您的运行中,scanf()返回1,因此您只能将第一个字符从名字和姓氏复制到全名

此外,您需要将全名初始化为全零,或者在复制完姓氏后nul终止它

此外,读取字符串的方式是危险的。您应该限制scanf()可以读取的字符数,否则它将溢出缓冲区并破坏内存(或者让黑客进来,等等):

或者更好:

#define STR(x) #x
#define SSTR(x) STR(x)
#define STR_FMT(x) "%" SSTR(x) "s"
#define FIRST_NAME_MAX_LEN 14

...

char first_name[FIRST_NAME_MAX_LEN + 1] = { 0 };

...

if (1 != scanf(STR_FMT(FIRST_NAME_MAX_LEN), first_name))
  ;  // TODO: handle unexpected input, EOF, error, etc.


您的
first_name
last_name
各为15个字符,
full_name
为30个字符。如果在最大长度first_name和最大长度last_name之间添加空格,您将遇到麻烦。我编辑了我的问题what's now它也不起作用它只输出名字,但不显示姓氏您没有增加
i
设置空格后,您将在手之前递增空格。我编辑了我的问题,但它仍然只输出名字,而不输出姓氏shown@tomfox不适合以您以前的方式更新您的帖子。建议恢复到以前的版本,并添加新的代码、数据或见解。您的
名字
 姓氏
每个是15个字符,
全名
是30个字符。如果在最大长度的姓氏和最大长度的姓氏之间添加一个空格,您将遇到麻烦。我编辑了我的问题“现在是什么”它也不起作用,它只输出姓氏,但不显示您在设置空格后不会递增
i
,您正在增加它。我编辑了我的问题,但它仍然只输出名字,而不输出姓氏shown@tomfox不适合按照您所做的方式更新您的帖子。建议恢复到以前的版本,并添加新代码、数据或见解。它会在名称末尾添加一些未知字符,直到数组的e个字符已完成这里有什么问题?我没有在codec中的任何位置键入first_name_length,您可以使用代码更改和获得的输出进行更新?看起来我应该检查一个更好的源,以获取
scanf()的返回值
。我将代码更新为简单的方式,但问题在于未知字符。在数组的字符完成之前,请在名称循环的末尾添加一些未知字符。这里有什么问题?我没有在编码中的任何位置键入第一个\u name \u length。您可以使用代码更改和获得的输出进行更新吗?看起来像是这样uld