使用toupper将char数组传递给函数

时间:2015-11-05 02:44:38

标签: c arrays string pointers char

长时间潜伏者需要帮助,我无法通过搜索找到。好吧,我说谎,我找到了一些东西,但它没有帮助我。

我想要做的是创建一个带字符串的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++;
        }
    }
}

1 个答案:

答案 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]);