为什么strcpy会更改这一参数的值?
嗨,我创建的这段代码是大写字母。strcpy设法将string的值复制到stringTwo,但是我想知道,如果我只是将string用作参数,strcpy为什么也会更改string的值。谢谢为什么strcpy会更改这一参数的值?,c,string,strcpy,C,String,Strcpy,嗨,我创建的这段代码是大写字母。strcpy设法将string的值复制到stringTwo,但是我想知道,如果我只是将string用作参数,strcpy为什么也会更改string的值。谢谢 #include <stdio.h> #include <string.h> char *capitalize(char *str) { int i; for (i = 0; i < strlen(str); i++) { if (str[i
#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;
}
#包括
#包括
字符*大写(字符*str){
int i;
对于(i=0;i 如果(str[i]>=97&&str[i]则问题在于大写
函数将所有字母转换为大写字母。也就是说,作为参数传递的字符串将是被转换的字符串
如果不希望修改原始字符串,则需要分两步执行:
strcpy(stringTwo, string); // First copy the original string
capitalize(stringTwo); // Then make all letters upper-case in the copy
问题是大写
函数将所有字母转换为大写字母。也就是说,作为参数传递的字符串将是被转换的字符串
如果不希望修改原始字符串,则需要分两步执行:
strcpy(stringTwo, string); // First copy the original string
capitalize(stringTwo); // Then make all letters upper-case in the copy
因为您正在更改原始文件(即“字符串”)并将其复制到新文件(即stringTwo)
如果您有机会使用调试器,那么首先会看到您正在更改“字符串”
编辑:
如果您愿意,也可以尝试以下方法:
我稍微修改了一下代码
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;
}
char*大写(char*str,char*str2){
strcpy(str2,str);
int i;
对于(i=0;i 如果(str2[i]>=97&&str2[i],因为您正在更改原始文件(即“string”)并将其复制到新文件(即stringTwo)
如果您有机会使用调试器,那么首先会看到您正在更改“字符串”
编辑:
如果您愿意,也可以尝试以下方法:
我稍微修改了一下代码
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;
}
char*大写(char*str,char*str2){
strcpy(str2,str);
int i;
对于(i=0;i 如果(str2[i]>=97&&str2[i]strcpy()
不改变string
的值,但capitalize()
改变了它的值!请不要这样使用或编码特定的代码。你真正需要的是函数,你甚至不需要检查字符是小写还是大写(或者确实是字母)首先,为什么要使用值97和122?改用“a”和“z”使代码更易于阅读,并且不要在for循环内调用strlen()
,因为长度将不必要地反复计算strcpy()
不会更改字符串的值,而是大写()
是的!请不要这样使用或编码特定的代码。您真正需要的只是函数,甚至不需要先检查字符是小写还是大写(或者确实是字母)。为什么要使用值97和122?使用'a'和'z'来代替?使代码更易于阅读,并且不调用strlen()
在for循环内部,因为长度将被不必要地再次计算和重新计算;或者大写(strcpy(stringTwo,string));
如果需要一步…好的,看起来很难看…或者大写(strcpy(stringTwo,string));
如果需要一步…好的,看起来很难看。。。