为什么strcpy会改变这个参数的值呢?
Why does strcpy change the value of this one parameter?
嗨,我创建的这段代码将小写字母大写。 strcpy 设法将字符串的值复制到 stringTwo,但是我想知道如果我只是将它用作参数,为什么 strcpy 也会更改字符串的值。谢谢
#include <stdio.h>
#include <string.h>
char *capitalize(char *str) {
int i;
for (i = 0; i < strlen(str); i++) {
if (str[i] >= 97 && str[i] <= 122) {
str[i] -= 32;
}
}
return str;
}
int main() {
char string[21];
char stringTwo[21];
printf("Enter string: ");
scanf("%20s", string);
strcpy(stringTwo, capitalize(string));
printf("\n%s\ncapitalized: %s", string, stringTwo);
return 0;
}
问题是 capitalize
函数将所有字母转换为大写 到位 。也就是说,您作为参数传递的字符串将被转换。
如果不想修改原字符串,需要分两步进行:
strcpy(stringTwo, string); // First copy the original string
capitalize(stringTwo); // Then make all letters upper-case in the copy
因为你正在改变原来的(即"string")并将其复制到新的(即stringTwo)。
如果您有机会使用调试器,那么您会首先看到您正在更改 "string"。
编辑:
或者,如果您愿意,可以试试这个:
我稍微更改了代码。
char *capitalize(char *str,char *str2) {
strcpy(str2, str);
int i;
for (i = 0; i < strlen(str2); i++) {
if (str2[i] >= 97 && str2[i] <= 122) {
str2[i] -= 32;
}
}
return str2;
}
通过函数中的这一小改动,您完成了函数中的所有工作。您只需键入 capitalize(string,stringTwo);
,这将执行您想要的操作。
嗨,我创建的这段代码将小写字母大写。 strcpy 设法将字符串的值复制到 stringTwo,但是我想知道如果我只是将它用作参数,为什么 strcpy 也会更改字符串的值。谢谢
#include <stdio.h>
#include <string.h>
char *capitalize(char *str) {
int i;
for (i = 0; i < strlen(str); i++) {
if (str[i] >= 97 && str[i] <= 122) {
str[i] -= 32;
}
}
return str;
}
int main() {
char string[21];
char stringTwo[21];
printf("Enter string: ");
scanf("%20s", string);
strcpy(stringTwo, capitalize(string));
printf("\n%s\ncapitalized: %s", string, stringTwo);
return 0;
}
问题是 capitalize
函数将所有字母转换为大写 到位 。也就是说,您作为参数传递的字符串将被转换。
如果不想修改原字符串,需要分两步进行:
strcpy(stringTwo, string); // First copy the original string
capitalize(stringTwo); // Then make all letters upper-case in the copy
因为你正在改变原来的(即"string")并将其复制到新的(即stringTwo)。
如果您有机会使用调试器,那么您会首先看到您正在更改 "string"。
编辑: 或者,如果您愿意,可以试试这个: 我稍微更改了代码。
char *capitalize(char *str,char *str2) {
strcpy(str2, str);
int i;
for (i = 0; i < strlen(str2); i++) {
if (str2[i] >= 97 && str2[i] <= 122) {
str2[i] -= 32;
}
}
return str2;
}
通过函数中的这一小改动,您完成了函数中的所有工作。您只需键入 capitalize(string,stringTwo);
,这将执行您想要的操作。