我的c代码有什么错误?

时间:2017-10-29 16:33:03

标签: c gcc

#include <stdio.h>
#define IsLowerCase(c) (((c)>='a') && ((c)<='z'))
#define ToUpperCase(s) (IsLowerCase(s)? (s)-'a' + 'A': (s))

int main(void){

    char *string = "abcdefghijklmnopqrstuvwxyz";

    while(*string != '\0'){
        *string = ToUpperCase(*string);
        ++string;
    }

}

警告:ISO C ++禁止将字符串常量转换为'char *'[-Wwrite-strings]

3 个答案:

答案 0 :(得分:1)

您的char *string应该是const char *string(但它是不可变的);或更好char string[] = ...。然后声明另一个变量char *s = string;,并循环和步骤s而不是string

答案 1 :(得分:0)

char *string = "abcdefghijklmnopqrstuvwxyz";是一个文字(无法修改),如果您尝试修改它,您将获得undefined behaviour。如果需要可修改的字符串,请分配内存或使用char[]数组。

这将有助于char string[] = "abcdefghijklmnopqrstuvwxyz";。现在它应该与你的其余代码一起使用。

您可以在this thread中获得有关您的问题的更多信息。

答案 2 :(得分:0)

问题从这里开始

.navbar-toggle:not(.collapsed) .menustructure{
  position: absolute;
  width: 100% !important;
  padding: 0;
  height: 1000px;
}


.navbar-toggle:not(.collapsed) .tl-nav-holder{
  width: 100% !important;
  height: 100% !important;
}

您将“string”声明为字符类型的指针,但使用“abcdefghijklmnopqrstuvwxyz”初始化它(这是const字符串,将无效)。 为了纠正它,你需要做两件事。

  1. 声明类型字符串的变量,例如str,即“string str;” 并用字符串初始化它,即

    char *string = "abcdefghijklmnopqrstuvwxyz";
    
  2. 使用string *类型声明指针“string”,即string * string。

    用str的地址初始化它,即

    "string str = "abcdefghijklmnopqrstuvwxyz";
    

    所以你的最终代码会像这样

    string *string = &str;