char *或char?我不明白这里的声明

时间:2015-12-04 14:00:41

标签: c string pointers char

我写了一个函数来剪切输入字符串的所有左边空格。这两个函数提供相同的输出" haha​​"当输入是"哈哈&#34 ;. 我的问题是:

1)为什么第一个需要返回但第二个不需要返回。我添加了#34;返回s"它造成语法错误。

2)如果我在另一种情况下使用它,它们有什么不同吗?

3)很多人说第二个返回一个字符而不是一个字符串,我的输出怎么样?

char *LTrim(char s[])               
{
    int i=0;
    while(s[i]==' ')i++;
    if (i>0) strcpy(&s[0],&s[i]);
    return s;
}

char LTrim(char s[])                
{
    int i=0;
    while(s[i]==' ')i++;
    if (i>0) strcpy(&s[0],&s[i]);
}

这是我的主要():

int main()
{
   char s[100];
   printf("input string ");
   gets(s);
   LTrim(s);
   puts(s); 
   return 0;
}

3 个答案:

答案 0 :(得分:1)

您的第二个代码段似乎没有返回声明,请更正以获得正确答案。

第一个函数返回一个字符指针,它将是指向字符数组起始位置的内存,而第二个函数返回一个字符。

你对返回的值做的是什么会有所不同,代码似乎对传递给它们的字符数组(字符串)执行相同的操作,所以如果你只是查看初始和最后的字符串,它会是一样的。

另一方面,如果您实际上为某些目的使用了返回的值,那么您将获得两个函数的不同结果。

答案 1 :(得分:0)

char *LTrim(char s[]){} 是字符数组/字符串的函数,返回 character pointer ,即返回 reference / memory address

char LTrim(char s[]) 是字符数组/字符串的函数,仅返回 character

答案 2 :(得分:0)

switch (x) { case 'A': System.out.print(x); x = 'D'; break; case 'B': System.out.print(x); x = 'C'; break; case 'C': System.out.print(x); x = 'D'; break; } 是一个单一字符。 char是指向char的指针。

char *主要用于指向字符串的第一个字符(例如示例中的char *)。

在第一个示例中,您返回修改后的s变量,在第二个示例中,您不返回任何内容,因此最好将返回值更改为s而不是void