gpt4 book ai didi

c - 使用 toupper 将字符数组传递给函数

转载 作者:行者123 更新时间:2023-11-30 17:08:46 24 4
gpt4 key购买 nike

长期潜伏者需要帮助,但我无法通过搜索找到。好吧,我在撒谎,我发现了一些东西,但它对我没有帮助。

我想做的是创建一个包含字符串的 char 数组并显示,将它们传递给一个函数,该函数将大写字母字符(应该只有一个),然后再次用大写字母显示 char 数组。

我无法让它工作。我通过搜索栏找到了它,它说我应该能够通过 传递一个指向 char 数组和大写的指针

*d = toupper(*d);

但它就是不起作用。谁能解释一下这个问题?谢谢!

它通过命令提示符使用 gcc 进行编译,并给出“总线 10 错误”,在 Xcode 上我得到:“线程 1:EXC_BAD_ACCESS(code=2,地址=内存位置)”

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {

void print_data(char *info[]);
void convert_data(char *info[]);
char *data[] = { "000a", "000b", "000c", "000d", "000e" };

print_data(data);
printf("\n");
convert_data(data);
print_data(data);

return 0;

}

void print_data(char *info[]) {
int n;
for (n=0; n < 5; n++) {
char *p = info[n];
while (*p != '\0') {
printf("%c", *(p++));
}
printf("\n");
}
}

void convert_data(char *info[]) {
int n;
for (n=0; n<5; n++) {
char *d = info[n];
while (*d != '\0') { // I THINK THIS IS THE PROBLEM
*d = toupper(*d); // RIGHT HERE TOO
d++;
}
}
}

最佳答案

char *data[] = { "000a", "000b", "000c", "000d", "000e" };

它声明了一个 char 指针数组,并初始化每个数组条目以指向一个常量字符串。常量字符串无法修改,因此当调用 toupper 修改任何这些字符串时会出现内存访问错误。

有很多方法可以解决这个问题。但它们都归结为为字符串数据分配内存。一种快速方法(但不一定是最好的方法)是更改 data 声明,以便每个数组条目都是 char 数组。就像这样:

char data[][5] = { "000a", "000b", "000c", "000d", "000e" };

然后还需要将接收data的函数更改为正确的类型:

void print_data(char info[][5]);
void convert_data(char info[][5]);

关于c - 使用 toupper 将字符数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33535782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com