直接内存访问的分段错误

时间:2014-08-14 15:22:31

标签: c string segmentation-fault

以下代码导致seg错误,当在GDB中运行时,当更改内存以将字符减少32时出现。

#include <stdio.h>

char *upper(char *);

int main(void) {

    char *my_word = "hello";

    printf("Upper: %s\n", upper(my_word));

    return 0;
}

char *upper(char *string) {
    while(*string != '\0') {
       *string -= 32;
        string++;
    }

    return string;
}

1 个答案:

答案 0 :(得分:1)

最后使用string++时,它会指向\0

char *upper(char *string) {
    while(*string != '\0') {
       *string -= 32;
        string++; // don't use this method here
    }
    return string; // it will return the address of \0
}

返回时会返回\0的地址。所以它不会打印任何东西。

尝试以下更改 -

#include <stdio.h>
#include<string.h>
char *upper(char *);

int main(void) {

        char my_word[] = "hello";

        printf("Upper: %s\n", upper(my_word));

        return 0;
}

char *upper(char *string) {
        int i;
        for(i=0;string[i];i++)
                string[i] -=32;
        return string;
}