我在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;
}
答案 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);
关于风格的观点。您通常不会在文件范围内的任何地方看到函数声明。所以不要太习惯在另一个函数范围内声明函数。