我正在尝试在C中编写一个程序,它接受三个字符指针,其中两个是用户输入的字符串,最后一个字符串是用户想要写入连接字符串的最后一个字符串。我对内存管理知之甚少,但被告知我必须使用malloc * 250来获取每个字符串的大小。我还被告知我必须使用指针来解决这个问题。
无论如何,在通过scanf输入两个字符串后,我得到一个Segmentation Fault(核心转储)错误,没有其他解释。我猜它与我在str_concat函数中引用指针的方式有关,但我不知道从哪里开始。
这是我的代码,包括str_concat函数:
#include <stdio.h>
#include <stdlib.h>
void str_concat(char* str1, char* str2, char* str);
int main() {
char* str1;
char* str2;
char* finalString;
str1 = malloc(sizeof(char)*250);
str2 = malloc(sizeof(char)*250);
finalString = malloc(sizeof(char)*250);
// input
printf("Enter string 1: ");
scanf("%s", str1);
printf("Enter string 2: ");
scanf("%s", str2);
// concatenate
str_concat(str1, str2, finalString);
printf("Final string: %s\n", finalString);
free(str1);
free(str2);
free(finalString);
return 0;
}
void str_concat(char* str1, char* str2, char* str) {
// go through string 1 up until terminating character
while(*str1 != '\0') {
*str = *str1; // copy str1 to final string up until the terminating character
str++; // increment position of final string
} // end while
while(*str2 != '\0') {
*str = *str2; // copy string 2 starting at final position of string 1
str++; // increment position of final string
str2++; // increment string 2 so we can go through values
} // end while
*str = '\0'; // add a null terminating character to the string to finish
}
答案 0 :(得分:2)
你的功能错了。你忘了在循环中增加指针str1
while(*str1 != '\0') {
*str = *str1; // copy str1 to final string up until the terminating character
str++; // increment position of final string
} // end while
该功能可以写得更简单
char * str_concat( const char *str1, const char *str2, char *str )
{
char *p = str;
while ( *p = *str1++ ) ++p;
while ( *p = *str2++ ) ++p;
return str;
}
考虑到字符串函数通常遵循通用约定,根据该约定,它们返回指向字符串的指针。
答案 1 :(得分:-1)
你的 finalString 应该是str1和str2加一的长度之和。
str1 = malloc(sizeof(char)*250);
str2 = malloc(sizeof(char)*250);
finalString = malloc(sizeof(char)*501);