为什么我的程序没有编译?

时间:2015-08-14 03:01:12

标签: c cs50

我的代码假设您初始化您输入的任何单词,但它拒绝编译 。 我不理解它给我的错误信息。

  

1 initialize.c:24:23:错误:不兼容的整数到指针转换传递' char'参数类型' const char *&#39 ;;拿走         地址与& [-Werror,-Wint-conversion]

     

2 initialize.c:21:23:错误:格式字符串不是字符串文字(可能不安全)[ - 错误,-Wformat-security]

     

3 initialize.c:21:23:错误:格式字符串不是字符串文字(可能不安全)[ - 错误,-Wformat-security]                  的printf(在toupper(S [1]));

#include <stdio.h>
#include<cs50.h>
#include<string.h>
#include<ctype.h>

void initialize(string s);
int main(int argc, string argv[])
{ 
     printf("May I have your name?");
     string name = GetString();
     initialize(name);

}
void initialize(string s)
{    
     int space = 1;

     for (int i = 0;i < strlen(s); i++)
     {     if(space == 1)
           {
               printf(toupper(s[i])); 
               space -= 1;
           }       
           if(strncmp(s[i]," ",1 ) )  
           {

                space += 1;         

           }
     }


}

2 个答案:

答案 0 :(得分:6)

printf期望一个类型为const char*的格式字符串作为其第一个参数,所以:

变化

printf(toupper(s[i])); 

printf("%c", toupper(s[i])); 

正如@Matt McNabb指出的那样,strncmp在这里也有类似的问题。因为你倾向于只比较第一个字符,所以你可以改变

if(strncmp(s[i]," ",1 ) )

if (s[i] == ' ')

使其更清晰,更有效。

答案 1 :(得分:0)

这是代码,在使其成为便携式

之后

但不处理用户输入错误

它有必要的更正,所以它干净地编译

#include <stdio.h>
#include <stdlib.h>
//#include <cs50.h>
#include <string.h>
#include <ctype.h>


void initialize(char * s);

int main( void )
{
     printf("May I have your name?");
     char name[50] = {'\0'};
     fgets(name, sizeof(name), stdin ); // should check returned value
                                        // to assure the line input was successful

     initialize(name);
     return 0;
} // end function: main


void initialize(char * s)
{
    int space = 1;

    for (size_t i = 0;i < strlen(s); i++)
    {
        if(space == 1)
        {
            printf("%c", toupper(s[i]));
            space -= 1;
        }

        if( ' ' == s[i] ) // always place literal on left so compiler
                          // catches any place where '=' was used
                          // when it should have been '=='
        {
            space += 1;
        }
    }
} // end function: initialize