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

标签 c visual-studio string-length

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

#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);

}

编辑:我编辑了下一个代码,但现在说“变量‘消息’周围的堆栈已损坏”

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];
        }
    }

最佳答案

我将 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);

}

关于c - 使用旧消息测试输入消息的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36432642/

相关文章:

visual-studio - Visual Studio 扩展 : Access VS Options from arbitrary DLL

java - Kotlin/Java - 如何识别全角字符?

c - 解析头文件以查找函数名称

c - 如何按字典顺序对结构中的字符串进行排序?

c++ - Qt 添加编译器

javascript - 如果 div 的字符串长度大于 10,则字体大小较小

ios - NSString 对象的 length 属性有一个不正确的值

c - 解释示例代码(c 编程)

c - C语言中如何将十六进制值转换为二进制值

git - 无法 pull ,因为使用 VS2015/Git 有未提交的更改