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]
部分是我更改的。