2013-03-21 114 views
0

我wondeirng我的代码从函数返回字符串....限制?

char* usage() 
    { 
     static char errors[] = {"Sorry Invalid Option entered\nPlease Enter an appropriate option"};   
     return errors; 
    } 

我已经正确调用的函数这个特殊的包裹和它做什么,我想它。然而就在我这样做的时候......我得到了很多错误。

char* usage() 
    { 
     static char errors[] = {"Sorry Invalid Option entered\n 
           Please Enter an appropriate option"};   
     return errors; 
    } 

我所做的只是把第二行放在下面一行我得到的错误。现在,我想知道的是两者之间的区别是什么?我似乎有两个字符数组输入相同的参数。是否因为我没有为数组使用malloc空间?

+0

你想要字符串中的所有空格吗? – 2013-03-21 19:18:09

回答

9

C和C++不支持多行文字是这样,但你可以这样做:

char* usage() 
{ 
    static char errors[] = {"Sorry Invalid Option entered\n" 
          "Please Enter an appropriate option"};   
    return errors; 
} 

注意额外的报价!

+0

要添加:这是因为预处理器将相邻的字符串文字连接成一个。 (当然忽略空白的邻接。) – GManNickG 2013-03-21 19:19:36

+0

啊,我明白了。这就是C++专用的东西。谢谢! – PresidentRFresh 2013-03-21 19:21:42

+0

@PresidentRFresh:这对C也有效,我澄清了答案。 – 2013-03-21 19:25:18

5

在C(我不知道C++),你可以通过使用一个事实,即报价在连接字符串(此串联由预处理完成)

char test[] = "one " "two" " " "<= that's a space :)" "\n" 
       "three and four\n" 
       "five etc and so on\n" 
       "\n" 
       "for ever and ever ...\n"; 

注写几行字符串:除了最后一行以外没有分号。

+0

谢谢我不知道这件事。 – PresidentRFresh 2013-03-21 19:29:53