在C中输入50个字符到一个字符串中

Input 50 characters into a string in C

#include<stdio.h>

#include<ctype.h>

#include<string.h>

#define _CRT_SECURE_NO_WARNINGS

int main(void){

//declare 3 char arrays to hold 3 strings of 20 characters each.
char string1[51];
char string2[51];
char string3[51];


// Prompt the user to enter string 1.
printf("Input String 1 : ");

/* Use the gets() function to input the string user enters into string1*/
fgets(string1, sizeof(string1), stdin);

// Prompt the user to enter string 2.
printf("Input String 2 : ");

/* Use the gets() function to input the string user enters into string2*/
fgets(string2, sizeof(string2), stdin);

//Perform the strcpy() operation on string3 from string 1.
//char *strcpy(char *string3, const char *string1);
//strcpy_s(string3, string1, sizeof(string3) - 1);
 memcpy(string3, string1, 51); 


//print string 3
 printf("String3: ");
 printf("%s",string3);

//Use the strlen() function on string 2
 int len;
 len = strlen(string2);

//print the output.
 printf("String 2 length: ");
 printf("%d \n",len);

//Use the strcmp function to compare string and string 2.
 int results;
 strcmp(string1, string2);
 results = strcmp(string1, string2);

 //print the result

if (results < 0) {
    printf("str1 is less than str2\n");
}
else if (results > 0) {
    printf("str2 is less than str1\n");
}
else {
    printf("str1 is equal to str2\n");
}


//Convert characters in string 1 to uppercase using the toupper()  

 
 int i = 0;
 int j = 0;

char chr;
for (i = 0; string1[i]; i++)
{
    chr = string1[i];
    printf("%c", toupper(chr));
}




/*Convert all the characters in string 2 to uppercase using the tolower()  
function on every character using a for loop.*/

 for (j = 0; string2[i]; j++)
 {
    chr = string2[i];
    printf("%c", tolower(chr));
}

return 0;
}

我正在尝试将 string1 复制到 string3,但是当我使用 strcpy()strcpy_s() 时它会引发错误。如果我从程序中完全删除 strcpy() 它将 运行.

我为每个字符串输入 50 个字符,所以它们需要是 51 个字符吗?

我更新了我的代码。输入大写字母时,我无法让 tolower() 以小写形式显示 string2。

请告诉我更改以及需要进行更改的原因。

The error: Error C4996 'strcpy': This function or variable may be unsafe.
Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS

该错误是由于 Visual Studio 不喜欢 strcpy 并建议使用 strcpy_s,以防止缓冲区溢出。

strcpy_s(string3, sizeof(string3), string1);

请记住,strcpy_s 仅适用于少数几个平台。 strncpy 是一个更可移植的函数,它做类似的事情,但是你需要传递它 sizeof(string3) - 1 而不是 sizeof(string3) 并且如果所有 50 个字节都不会以 null 终止结果string3 的内容已写入,因此您必须自己完成。

strncpy(string3, string1, sizeof(string3) - 1);
string3[sizeof(string3) - 1] = '[=11=]';

或者,您可以 #define _CRT_SECURE_NO_WARNINGS 并继续使用 strcpy