长时间潜伏者需要帮助,我无法通过搜索找到。好吧,我说谎,我找到了一些东西,但它没有帮助我。
我想要做的是创建一个带字符串的char数组并显示,将它们传递给一个大写字母字符(只应该是一个)的函数,然后再用大写字母再次显示char数组字母。
我无法让它发挥作用。我通过搜索栏发现它说我应该能够通过
传递指向char数组和大写的指针*d = toupper(*d);
但它不起作用。任何人都可以对这个问题有所了解吗?谢谢!
它通过命令提示符使用gcc编译,它给出了一个"总线10错误"在Xcode上我得到这个:"线程1:EXC_BAD_ACCESS(代码= 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++;
}
}
}
答案 0 :(得分:0)
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]);