c中char数组中的空格
spaces in char array in c
如何在数组中的两个单词之间添加 space,我从用户那里收到两个单词,他的名字,他的姓氏,我需要它来将两个数组存储在一个数组中,它们之间是 space
这是我的代码
#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;
}
在两个 scanf 中输入 "name" 值时的输出:
n n
应该是:
name name
编辑:
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int i=0,i2;
printf("enter your first name\n");
scanf("%14s",first_name);
printf("enter your last name\n");
scanf("%14s",last_name);
for(i2 = 0;first_name[i2];i2++){
full_name[i] = first_name[i2];
i++;
}
full_name[i++]=' ';
for(i2 = 0;last_name[i2];i2++){
full_name[i] = last_name[i2];
i++;
}
printf("%s",full_name);
return 0;
}
在第一个 scanf 中输入 "tom" 值并在第二个 scanf 中输入 "fox" 值时的输出:
tom fox↓@
应该是:
tom fox
改变
i++;
full_name[i]=' ';
到
full_name[i++]=' ';
你的for循环条件也不对:
for(i2 = 0;i2 < first_name_length;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;
}
scanf()
中的 return 值是成功扫描的字段数,而不是某些字符串的长度。
使用:
if (1 != scanf("%14s",first_name)) Handle_EOF_orNoInput();
first_name_length = strlen(first_name);`
last_name
也一样
[编辑]
由于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] = '[=13=]'; // add this
printf("%s",full_name);
函数 scanf() 不会 return 读入的字符数。而是 return 它读入(或错误)的成功匹配数。在您的运行中,scanf() 是 returning 1,因此您只需将第一个字符从名字和姓氏复制到全名。
此外,您需要将 full_name 初始化为全零或 nul 在完成复制姓氏后终止它。
此外,您读取字符串的方式很危险。您应该限制 scanf() 可以读取的字符数,否则它会溢出您的缓冲区并破坏您的内存(或让黑客进入等):
if (1 != scanf("%14s", first_name))
; // TODO: handle unexpected input, EOF, error, etc.
甚至更好:
#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.
如何在数组中的两个单词之间添加 space,我从用户那里收到两个单词,他的名字,他的姓氏,我需要它来将两个数组存储在一个数组中,它们之间是 space
这是我的代码
#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;
}
在两个 scanf 中输入 "name" 值时的输出:
n n
应该是:
name name
编辑:
#include <stdio.h>
int main()
{
char first_name[15], last_name[15] ,full_name[32];
int i=0,i2;
printf("enter your first name\n");
scanf("%14s",first_name);
printf("enter your last name\n");
scanf("%14s",last_name);
for(i2 = 0;first_name[i2];i2++){
full_name[i] = first_name[i2];
i++;
}
full_name[i++]=' ';
for(i2 = 0;last_name[i2];i2++){
full_name[i] = last_name[i2];
i++;
}
printf("%s",full_name);
return 0;
}
在第一个 scanf 中输入 "tom" 值并在第二个 scanf 中输入 "fox" 值时的输出:
tom fox↓@
应该是:
tom fox
改变
i++;
full_name[i]=' ';
到
full_name[i++]=' ';
你的for循环条件也不对:
for(i2 = 0;i2 < first_name_length;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;
}
scanf()
中的 return 值是成功扫描的字段数,而不是某些字符串的长度。
使用:
if (1 != scanf("%14s",first_name)) Handle_EOF_orNoInput();
first_name_length = strlen(first_name);`
last_name
[编辑]
由于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] = '[=13=]'; // add this
printf("%s",full_name);
函数 scanf() 不会 return 读入的字符数。而是 return 它读入(或错误)的成功匹配数。在您的运行中,scanf() 是 returning 1,因此您只需将第一个字符从名字和姓氏复制到全名。
此外,您需要将 full_name 初始化为全零或 nul 在完成复制姓氏后终止它。
此外,您读取字符串的方式很危险。您应该限制 scanf() 可以读取的字符数,否则它会溢出您的缓冲区并破坏您的内存(或让黑客进入等):
if (1 != scanf("%14s", first_name))
; // TODO: handle unexpected input, EOF, error, etc.
甚至更好:
#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.