none
字符串大写转换问题 RRS feed

  • 问题

  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    char *string_upper( char *str )
    {
    char *temp = str ;

    if( 0 == strlen(temp) ) return str;

    while( *temp != '\0' ){
    *temp = (*temp++) + 'A' - 'a' ;
    }

    return str;
    }


    int main(int argc, char *argv[])
    {
    puts(string_upper("test"));
    }

    请问我上面的代码有什么错误吗?在DOS(16位)下可以执行,但是在Win & Linux下就执行不起来,提示Segment Fault。内存不能写。请帮忙给个提示。谢谢啦~
    2009年10月31日 6:28

答案

  • 与大小写转换算法无关。
    puts(string_upper("test"));所引用的"test"存放在只读数据区,无法修改,故发生段违例错误;
    正确的做法:
    char test[] = "test";//定义一个数组并赋值
    puts(string_upper(test));//使用上述数组作为参数,保证可修改

    2009年10月31日 9:28