在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
。
#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
。