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