我的代码假设您初始化您输入的任何单词,但它拒绝编译 。 我不理解它给我的错误信息。
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;
}
}
}
答案 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