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

标签 c string pointers char

我编写了一个函数来剪切输入字符串的所有左侧空间。当输入为“哈哈”时,这两个函数给出相同的输出“哈哈”。 我的问题是:

1)为什么第一个需要返回而第二个不需要。我添加了“return 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]);
}

这是我的 main():

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

最佳答案

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

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

您对返回的值所做的操作将会产生差异,这两个代码似乎都对传递给它们的字符数组(字符串)执行相同的操作,所以如果您只查看初始和最终字符串,都会一样。

另一方面,如果您实际上将返回值用于某种目的,那么这两个函数都会得到不同的结果。

关于char* 或 char ?.我不明白这里的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090066/

相关文章:

c - 如何使用 C 语言在整个程序中仅使用一个变量接受 5 个数字并打印总和?

从 C 程序到 gdb 的命令

c# - string.Empty 可以等于 null 吗?

c# - C# String.Format() 和 String.Join() 的 Java 等效项

c - 为什么在访问阻塞/受限内存位置时不会出现段错误?

c - 数组的长度始终为 2

c - 使用 Intel MKL 计算 `trans(a)*inv(b)*a` 的正确方法

string - 在 Bash 中从末尾提取子字符串

c++ - 返回指向 vector 中项目的指针(来自迭代器)

c++ - 释放二维数组中的内存