C中的Strcpy和strcat函数

时间:2017-03-17 21:34:17

标签: c visual-studio-2015

我在Visual Studio 2015中使用C编程语言,而我只是试图提示用户输入三个句子,然后将其合并为一个三句话段落。我只是不能让我的strcpy和strcat函数工作。 思考??

提前非常感谢!

#include <string.h>
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MASTERSIZE 300

int main()
{

char *calcTotalMessage(char[100], char[100], char[100]);
#define MSIZE 100
#define MSIZEE 100
#define MSIZEEE 100

int read;
char message[MSIZE];
char m2[MSIZE];
char m3[MSIZE];
char* totalM;

printf("Enter a sentence:");

scanf_s("%s", &message);

printf("Enter another sentence:");
scanf_s("%s", &m2);

printf("Enter third sentence:");
scanf_s("%s", &m3);

totalM = calcTotalMessage(message, m2, m3);
printf(totalM);

return 0;
}

char *calcTotalMessage(char *m1, char *m2, char *m3)
{
void strcat(char, char);
void strcpy(char, char);
char *totalM = "";

strcpy(*totalM, *m1);
strcat(*totalM, *m2);
strcat(*totalM, *m3);

return totalM;

}

1 个答案:

答案 0 :(得分:0)

char *totalM = "";

所以totalM指向一个字符串文字。 C标准不允许修改文字。您不一定会得到编译时错误,但您的程序有未定义的行为。它不太可能表现得很好。

strcpy(*totalM, *m1);

然后您尝试传递strcpy一个字符(*totalM*m1的类型),而不是指针。该字符将转换为您尝试写入的某些无意义的指针值。这再次导致未定义的行为。您的编译器甚至试图警告您,但是您没有注意这些错误,而是为不存在的函数添加了声明(strcpy(char, char))。

我建议你将输出缓冲区传递给calcTotalMessage而不是返回它。

void calcTotalMessage(char const *m1, char const *m2, char const *m3, char *output) {
    output[0] = '\0';
    strcpy(output, m1);
    strcat(output, m2);
    strcat(output, m3);
}

这样称呼:

char totalM[MSIZE + MSIZEE + MSIZEEE] = {'\0'};
calcTotalMessage(message, m2, m3, totalM);

关于风格的观点。您通常不会在文件范围内的任何地方看到函数声明。所以不要太习惯在另一个函数范围内声明函数。