c - 更改字符串的大小写
问题描述
我是 C 新手,正在尝试编写一个简单的函数,该函数可以接收字符串(或字符数组)并根据以下规则转换其大小写:
- 第一个字符应为大写。
- 其余字符应为小写。
我已经编写了代码,但遇到了分段错误,我对出了什么问题感到困惑。这是我写的:
void myFunction(char name[]) {
printf("Before: %s", name);
name[0] = toupper(name[0]); // This line seems to cause problems.
// Convert the other letters to lowercase if they aren't already.
for(int i = 1; name[i] != '\0'; i++) {
if(islower(name[i])) {
name[i] = tolower(name[i]);
} else {
name[i] = name[i];
}
}
name[i] = '\0';
printf("After: %s", name);
}
void my_caller(*name1) {
printf("Name before changing case: %s\n", name1);
myFunction(name1);
printf("Name after changing case: %s\n", name1);
}
// In another .c file.
int main() {
char name1[] = "adam";
my_caller(&name1);
}
在myFunction
,如果我注释掉除了
name[0] = toupper(name[0]);
我仍然得到分段错误。所以这表明这条线是罪魁祸首之一,但我不明白为什么。我想将字母转换为大写并将其放回字符串中。
解决方案
首先,有一个函数定义,如
void my_caller(name1)
是有问题的,因为缺少类型(过去是,现在已经过时的规则)默认为int
. 你希望这是一个char *
. 不是int
。
您需要将其更改为
void my_caller(char * name1) {....
此外,您需要调用函数 as my_caller(name1);
,传递数组与传递指向数组第一个元素的指针相同。
此外,在调用函数时,您不会传递数组的地址(如果您感到困惑,请检查类型)。
也就是说,在里面myFunction()
,范围i
仅限于for
循环,但你想在范围之外使用它(以空终止),所以你必须i
在功能块范围内声明。
故事的寓意:打开编译器警告/错误设置,并密切注意编译器发出的消息。他们在那里是有原因的。
注意:进行这些更改后,代码按预期工作。
推荐阅读
- r - FUN 中的错误(左,右):R 中二元运算符的非数字参数
- ios - fontFamily "Courier" 不是系统字体本机基础博览会
- css - CSS:是否可以让按钮的 50% 的框阴影为一种颜色,而另外 50% 为另一种颜色?
- javascript - 如何通过单击打开子菜单并希望它们专门打开?
- javascript - 如何在nodejs中使用multer-axios上传具有自定义名称的文件
- javascript - Javascript 继承链
- python - python提取单词时如何删除\?
- python - 自嵌套无限字典
- python - Pytest 不在测试报告中显示元组值
- vue.js - Vue js:如何在单击按钮时将类添加到最近的 td