gpt4 book ai didi

在不使用库函数的情况下连接 C 中的字符串

转载 作者:行者123 更新时间:2023-11-30 15:24:20 24 4
gpt4 key购买 nike

我需要编写一个简单的程序(没有花哨的指针内容,没有库函数。它用于教育目的),从用户那里读取名字和第二个名字,并将它们打印在一行中,并用空格分隔。我没有得到结果,也不知道为什么:

# include <stdio.h>
//the program loosely simulates the behaviour of strcpy
main(){
char fname[16], sname[16], cat[31];
int i, j;
printf("Please enter your first name: ");
scanf("%s", fname);
printf("Please enter your second name: ");
scanf("%s", sname);

for (i=0; fname[i] != '\0'; cat[i++] = fname[i++])
;

cat[i+1] = ' '; //adds a space between the tokens

for (j=i+1; sname[j] != '\0'; cat[j++] = sname[j++])
;

printf("The final result is:\n%s", cat);
return 0;
}

最佳答案

您有几个问题。首先,由于 cat 必须足够大以容纳前两个字符串并且它们之间有一个空格,因此应该将其声明为 cat[32] -- 名字的 15 个字符、姓氏的 15 个字符、1 个空格和 1 个尾随空字节。

您将单词之间的空格放在了错误的位置。第一个循环让 i 保留了 cat 中的下一个位置,所以它应该是:

cat[i] = ' ';

接下来,第二个循环中的数组索引不正确。 cat 中的位置是正确的,因为它们从您上次循环结束的位置开始。但需要从sname中的0开始。所以这个循环应该是:

for (j = i+1, k = 0; sname[k] != 0; cat[j++] = sname[k++])
;

最后,连接两个字符串后,您需要在结果中附加一个空字节,以指示结束。

cat[j] = 0;

另一个问题是,由于您使用 cat[i++] = fname[i++],因此在第一个循环中每次都会将 i 递增两次。其中每个 i++ 都会递增变量。您需要将分配与增量分开:

for (i=0; fname[i] != '\0'; i++) {
cat[i] = fname[i];
}

这是有效的脚本的最终版本:

# include <stdio.h>
//the program loosely simulates the behaviour of strcpy

int main() {
char fname[16], sname[16], cat[32];
int i, j, k;
printf("Please enter your first name: ");
scanf("%s", fname);
printf("Please enter your second name: ");
scanf("%s", sname);

for (i=0; fname[i] != '\0'; i++) {
cat[i] = fname[i];
}

cat[i] = ' ';

for (j = i+1, k = 0; sname[k] != 0; cat[j++] = sname[k++]) {
}

cat[j] = 0;

printf("The final result is: %s\n", cat);
return 0;
}

关于在不使用库函数的情况下连接 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com