gpt4 book ai didi

C 程序 - 将字符串数组组合到程序中时出错

转载 作者:行者123 更新时间:2023-11-30 14:50:37 25 4
gpt4 key购买 nike

我正在尝试编写程序来要求用户输入名字和姓氏。然后我的程序将得出他们的全名(名字+姓氏的组合)和全名的长度。我的输出现在的全名为空且长度为 0。我想我的问题出在 display_name 函数上。到目前为止,这是我的代码。谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void display_name(char *fullname);

int count_char( char*x_ptr);

char * get_name(char * first_name, char * last_name);

#define MAX 80 // maximum number of array elements

int main(void)
{
char first_name[MAX];
char last_name[MAX];
char *x_ptr;

system("cls");
printf("Enter Last Name: \n" );
scanf("%s", &last_name );
printf("Enter First Name: \n" );
scanf("%s", &first_name );

x_ptr = get_name(first_name, last_name);

display_name(x_ptr);

puts("");
system("pause");
return 0;
}

char * get_name(char *first_name, char *last_name)
{
static char fullname[MAX];
char x;
x = 0;
strcpy(fullname, first_name);
strcat(fullname, " ");
strcat(fullname, last_name);


while (((fullname[x] = getchar()) != '\n') && (x < (MAX-1)))
{
x++;
}
fullname[x] = '\0';
return(fullname);

}
/* Function to print out string passed to it and display the length of fullname*/
void display_name(char *fullname)
{
char *a;
printf("Your Full name is ");
a = &fullname[0];
while (*a != '\0')
{
putchar(*a);
a++;
}

int length;
length = strlen(fullname);
printf("\nHas %d Characters", length);
length = count_char(fullname);
printf("\nHas %d Non Space Characters", length);

}
/* function to return count of non space characters*/
int count_char( char * x_ptr)
{
char *b;
unsigned int count=0;
b = x_ptr;
while (*b != '\0')
{
if (*b != ' ')
count++;
b++;
}
return
(count);
}

最佳答案

scanf("%s", &last_name );

编译器提示了,而你忽略了它。它应该是 scanf("%s", last_name );firstname 也是如此。你的类型是 char (*)[] ,而 scanf 需要 char* ,这就是我们在第二种情况下给出的。

这部分没有做任何你会做的事情来实现你想要做的事情。

while (((fullname[x] = getchar()) != '\n') && (x < (MAX-1))) 

这是使用 getcharstdin 获取字符并将其放入存储连接名称的 char 数组中。

使用static char数组不是一个好的解决方案。下次您尝试使用此函数时 - 它将覆盖之前由另一个函数写入的数据。函数 get_name 的示例实现为

char * get_name(char *first_name, char *last_name)
{
char *fullname = malloc(strlen(first_name)+2+strlen(last_name));
if(!fullname){
perror("malloc");
exit(EXIT_FAILURE);
}
strcpy(fullname, first_name);
strcat(fullname, " ");
strcat(fullname, last_name);
return fullname;
}

使用此实现的好处是 - 现在正在使用的数据与调用此实现的方法并不紧密耦合。因此它可以独立于之前在另一个函数中的使用而被重用。

此外,在使用函数get_name时,请记住在使用完动态分配的内存后释放它。

关于C 程序 - 将字符串数组组合到程序中时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932849/

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