C 使用旧消息测试输入消息的长度

C 使用旧消息测试输入消息的长度,c,visual-studio,string-length,C,Visual Studio,String Length,我正在编写一个程序,要求我输入一条新消息并替换旧消息,但我必须测试消息是否比上一条消息长。我想得到和我的程序类似的答案,因为这是我现在正在学习的课程。它要求我输入新字符的大小,但当我测试它时,它会使用我设置的大小进行测试 #include <stdio.h> #include <stdlib.h> void editedMessage(char* nmessage, int size){ char newMessage[]; printf("Enter

我正在编写一个程序,要求我输入一条新消息并替换旧消息,但我必须测试消息是否比上一条消息长。我想得到和我的程序类似的答案,因为这是我现在正在学习的课程。它要求我输入新字符的大小,但当我测试它时,它会使用我设置的大小进行测试

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

void editedMessage(char* nmessage, int size){

    char newMessage[];
    printf("Enter a new message!\n");
    gets_s(newMessage, sizeof(newMessage));

    if (size > sizeof(newMessage)){
        for (int i = 0; i < sizeof(newMessage); i++){
            nmessage[i] = newMessage[i];
        }
    }
    else {
        printf("New message is too long.\n\n");
    }

}

void main(){

    char message[] = "This is some message!";

    printf("Old message\n%s\n\n", message);

    editedMessage(message, sizeof(message));

    printf("New message\n\n%s\n\n", message);

}
#包括
#包括
void editedMessage(char*n消息,整数大小){
char newMessage[];
printf(“输入新消息!\n”);
获取_s(newMessage,sizeof(newMessage));
如果(大小>sizeof(新消息)){
for(int i=0;i
编辑:我编辑了下一个代码,但现在说“变量周围的堆栈”消息“已损坏”

char newMessage[256];
    printf("Enter a new message!\n");
    gets_s(newMessage, sizeof(newMessage));
    int len = strlen(newMessage);

    if (size > len){
        for (int i = 0; i < sizeof(newMessage); i++){
            nmessage[i] = newMessage[i];
        }
    }
charnewmessage[256];
printf(“输入新消息!\n”);
获取_s(newMessage,sizeof(newMessage));
int len=strlen(newMessage);
如果(尺寸>透镜){
for(int i=0;i
我将
editedMessage
的返回类型更改为
char*
,并减少了它的参数

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

#define MAX_LENGTH 1000
char* editedMessage(char* oldMessage){

    char newMessage[MAX_LENGTH];
    printf("Enter a new message : ");
    fgets(newMessage,MAX_LENGTH,stdin);

    if (strlen(newMessage)<= strlen(oldMessage)){
        strcpy(oldMessage,newMessage);
    }
    else {
        printf("New message is too long.\n\n");
    }
return oldMessage; // In fact the value of oldMessage should have been changed if the new message is shorter in length
}

void main(){

    char message[MAX_LENGTH] = "This is some message!";

    printf("Old message : %s\n", message);

    editedMessage(message);

    /* Since we are dealing with pointers, note that I am not catching any
     * return values here. In essence any changes made to message in the 
     * editedMessage function is automatically effective in the main         
     * function.
     */


    printf("New message :%s\n", message);

}
#包括
#包括
#包括
#定义最大长度1000
char*editedMessage(char*oldMessage){
char newMessage[最大长度];
printf(“输入新消息:”);
fgets(新消息,最大长度,标准输入);

如果(strlen)(newMessage)您是否尝试打印该
sizeof(newMessage)
的值,以查看您在另一条消息中的键入空间有多大?如果是,这说明定义
char newMessage[]
?我需要测试新消息是否比旧消息长哇!我明白了,但你不会走那么远。看看string.h和
strlen
忘记提到
strlen
将考虑消息结尾“\0”,而
sizeof
将返回你的数组大小…这段代码对我不起作用,上面写着“表达式:(L”“缓冲区太小了”&&0)。这是一项困难的任务,因为“定位问题”通常是一个多步骤的操作,没有明确的答案。在这种情况下,让你走得最远的错误跟踪机制就是在处理静态数据时要小心buffers@AntonioGvardijan:我猜错误在strcpy的
部分。请参见编辑。
消息[MAX_LENGTH]
部分是我更改的。