[英]spaces in char array in c
如何在數組中的兩個單詞之間添加空格,我從用戶那里收到他的名字的兩個單詞,他的姓氏,我需要用它來將兩個數組存儲在它們之間的一個空格中
這是我的代碼
#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中輸入“名稱”值時的輸出:
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
scanf()
的返回值是成功掃描的字段數,而不是某些字符串的長度。
采用:
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] = '\0'; // add this
printf("%s",full_name);
在沒有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;
}
更改
i++;
full_name[i]=' ';
至
full_name[i++]=' ';
您的for循環條件也不完全正確:
for(i2 = 0;i2 < first_name_length;i2++){
函數scanf()不返回讀入的字符數。而是返回其讀入(或錯誤)的成功匹配數。 在您的運行中,scanf()返回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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.