为什么这个程序没有';不打印连接的字符串? 连接字符串的代码 #包括 char*concat(char*p1,char*)//功能去重 内部主(空) { 字符a[100],b[100],*q=NULL;//声明两个字符数组 printf(“输入str1:”); scanf(“%s”,a); printf(“输入str2:”); scanf(“%s”,b); q=concat(a,b);//调用str-concat函数 printf(“连接的str:%s\n”,q); 返回0; } char*concat(char*p1,char*p2)//连接字符串的函数 { 而(*p1!='\0') p1++; 而(*p2!='\0') { *p1=*p2; p1++; p2++; } *p1='\0'; printf(“连接的str=%s\n”,p1);//打印连接的字符串 return p1;//返回被调用函数的指针 }
//虽然逻辑是正确的,但它没有显示输出。为什么这个程序没有';不打印连接的字符串? 连接字符串的代码 #包括 char*concat(char*p1,char*)//功能去重 内部主(空) { 字符a[100],b[100],*q=NULL;//声明两个字符数组 printf(“输入str1:”); scanf(“%s”,a); printf(“输入str2:”); scanf(“%s”,b); q=concat(a,b);//调用str-concat函数 printf(“连接的str:%s\n”,q); 返回0; } char*concat(char*p1,char*p2)//连接字符串的函数 { 而(*p1!='\0') p1++; 而(*p2!='\0') { *p1=*p2; p1++; p2++; } *p1='\0'; printf(“连接的str=%s\n”,p1);//打印连接的字符串 return p1;//返回被调用函数的指针 },c,C,//虽然逻辑是正确的,但它没有显示输出。 //为什么此代码不起作用?您返回的是未指向连接字符串开头的p1。您只需保存原件并将其返回即可 char *concat(char *p1,char *p2) //function to concatenate strings { char *org = p1; ... return org; } 返回的是p1,它不指向连接字符串的开头。您只需保存原件并将其返回即可 char *concat(char
//为什么此代码不起作用?您返回的是未指向连接字符串开头的
p1
。您只需保存原件并将其返回即可
char *concat(char *p1,char *p2) //function to concatenate strings
{
char *org = p1;
...
return org;
}
返回的是
p1
,它不指向连接字符串的开头。您只需保存原件并将其返回即可
char *concat(char *p1,char *p2) //function to concatenate strings
{
char *org = p1;
...
return org;
}
您可以尝试以下方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXCHAR 100
void trim_newline(char *str);
char *concatenate(const char *str1, const char *str2);
void exit_if_null(void *ptr, const char *msg);
int
main(void) {
char str1[MAXCHAR], str2[MAXCHAR];
char *concat;
printf("Enter str1: ");
if (fgets(str1, MAXCHAR, stdin) != NULL) {
trim_newline(str1);
}
printf("Enter str2: ");
if (fgets(str2, MAXCHAR, stdin) != NULL) {
trim_newline(str2);
}
concat = concatenate(str1, str2);
printf("Concatenated str:%s\n",concat);
free(concat);
return 0;
}
void
trim_newline(char *str) {
int length = strlen(str) - 1;
if (str[length] == '\n') {
str[length] = '\0';
}
}
char
*concatenate(const char *str1, const char *str2) {
char *result;
result = malloc(strlen(str1) + strlen(str2) + 1);
exit_if_null(result, "Initial Allocation");
strcpy(result, str1);
strcat(result, str2);
return result;
}
void
exit_if_null(void *ptr, const char *msg) {
if (!ptr) {
printf("Unexpected null pointer: %s\n", msg);
exit(EXIT_FAILURE);
}
}
#包括
#包括
#包括
#定义MAXCHAR 100
无效修剪新行(char*str);
字符*串联(常量字符*str1,常量字符*str2);
如果无效,则无效退出(无效*ptr,常量字符*msg);
int
主(空){
字符str1[MAXCHAR],str2[MAXCHAR];
炭*贝壳;
printf(“输入str1:”);
if(fgets(str1、MAXCHAR、stdin)!=NULL){
修剪新线(str1);
}
printf(“输入str2:”);
if(fgets(str2、MAXCHAR、stdin)!=NULL){
修剪新线(str2);
}
concat=串联(str1,str2);
printf(“连接的str:%s\n”,concat);
免费(concat);
返回0;
}
无效的
修剪新行(字符*str){
整数长度=strlen(str)-1;
如果(str[length]='\n'){
str[length]='\0';
}
}
烧焦
*连接(常量字符*str1,常量字符*str2){
字符*结果;
结果=malloc(strlen(str1)+strlen(str2)+1);
如果为空,则退出(结果为“初始分配”);
strcpy(结果,str1);
strcat(结果,str2);
返回结果;
}
无效的
如果为空,则退出(void*ptr,const char*msg){
如果(!ptr){
printf(“意外的空指针:%s\n”,msg);
退出(退出失败);
}
}
您可以尝试以下方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXCHAR 100
void trim_newline(char *str);
char *concatenate(const char *str1, const char *str2);
void exit_if_null(void *ptr, const char *msg);
int
main(void) {
char str1[MAXCHAR], str2[MAXCHAR];
char *concat;
printf("Enter str1: ");
if (fgets(str1, MAXCHAR, stdin) != NULL) {
trim_newline(str1);
}
printf("Enter str2: ");
if (fgets(str2, MAXCHAR, stdin) != NULL) {
trim_newline(str2);
}
concat = concatenate(str1, str2);
printf("Concatenated str:%s\n",concat);
free(concat);
return 0;
}
void
trim_newline(char *str) {
int length = strlen(str) - 1;
if (str[length] == '\n') {
str[length] = '\0';
}
}
char
*concatenate(const char *str1, const char *str2) {
char *result;
result = malloc(strlen(str1) + strlen(str2) + 1);
exit_if_null(result, "Initial Allocation");
strcpy(result, str1);
strcat(result, str2);
return result;
}
void
exit_if_null(void *ptr, const char *msg) {
if (!ptr) {
printf("Unexpected null pointer: %s\n", msg);
exit(EXIT_FAILURE);
}
}
#包括
#包括
#包括
#定义MAXCHAR 100
无效修剪新行(char*str);
字符*串联(常量字符*str1,常量字符*str2);
如果无效,则无效退出(无效*ptr,常量字符*msg);
int
主(空){
字符str1[MAXCHAR],str2[MAXCHAR];
炭*贝壳;
printf(“输入str1:”);
if(fgets(str1、MAXCHAR、stdin)!=NULL){
修剪新线(str1);
}
printf(“输入str2:”);
if(fgets(str2、MAXCHAR、stdin)!=NULL){
修剪新线(str2);
}
concat=串联(str1,str2);
printf(“连接的str:%s\n”,concat);
免费(concat);
返回0;
}
无效的
修剪新行(字符*str){
整数长度=strlen(str)-1;
如果(str[length]='\n'){
str[length]='\0';
}
}
烧焦
*连接(常量字符*str1,常量字符*str2){
字符*结果;
结果=malloc(strlen(str1)+strlen(str2)+1);
如果为空,则退出(结果为“初始分配”);
strcpy(结果,str1);
strcat(结果,str2);
返回结果;
}
无效的
如果为空,则退出(void*ptr,const char*msg){
如果(!ptr){
printf(“意外的空指针:%s\n”,msg);
退出(退出失败);
}
}
在您的concat
函数中,当您执行返回p1
时,*p1
的值是多少?@gsamaras不是很糟糕,p1
仍然指向一个有效字符串。是的@Someprogrammerdude,但不是他想要的字符串;)调试器将在concat
函数中很好地回答您的问题,当您执行返回p1
时,*p1
的值是多少?@gsamaras不是很糟糕,p1
仍然指向有效字符串。是的@Someprogrammerdude,但不是他想要的字符串;)调试器将非常准确地回答您的问题。然而,建议OP使用一张纸,画出他所做的代码,这将是一件好事!很明显……他会学会的请注意,您的函数遇到了标准的strcat()
函数所遇到的问题。然而,建议OP使用一张纸,画出他所做的代码,这将是一件好事!很明显……他会学会的请注意,您的函数遇到了标准strcat()函数所遇到的问题。