【发布时间】:2021-07-01 09:21:22
【问题描述】:
我被要求这样做:
创建一个
skip_spaces()函数接受字符串s,它返回对数组中第一个不是空格字符的元素的引用(如果字符串仅由空格组成,则指针将寻址空终止符\0)。 然后使用在stdin上读取的字符串创建一个主程序主体调用此函数。 根据给定的结果,程序将显示来自第一个非空格char的字符串。"
我才开始使用指针,而且我显然不是 C 专家,所以我很迷茫。 这是我到目前为止得到的:
在skip_spaces.c 我有:
char *skip_spaces(char *s[]) {
char *ref = '\0';
int i = 0;
while (*s[i] != '\0') {
if (*s[i] == ' '):
i++;
else {
*ref = *s[i];
}
}
}
在skip_spaces.h 我有:
char *skip_spaces(char *);
还有我的主程序:
#include "skip_spaces.h"
#include <stdio.h>
int main(void) {
int input;
char *str[30];
char *spaceless;
printf("input string : ");
input = scanf("%s", str);
if (input == 1) {
int i = 0;
spaceless = skip_spaces(str);
printf("modified string : %s.", spaceless);
return -1;
}
现在,我还不确定该程序是否能完成我想要它做的事情。
我的问题是,此时我什至无法对其进行测试:我已经尝试了很多东西,但我永远无法正确编译,每当我在某个地方解决问题时,我在其他地方遇到了另一个问题。几乎所有错误都来自我的主程序。
我有两个非常持久的错误:
error: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char **’
这个错误指向我的 input = scanf 行,更准确地说是我的 str var
skip_spaces.h:1:8: note: expected ‘char *’ but argument is of type ‘char **’
我试过坐立不安,将* 放在这里,& 放在那里,但要么我有这 2 个错误,要么我还有更多其他错误......
我什至在 Internet 上为这个确切的功能找到了几个工作代码(实际上大部分来自 SO),但是每当我尝试在我的代码中实现他们的工作解决方案时,我都会再次遇到这些错误。 100%肯定我的问题来自我对指针的理解。我希望有人能解释一下。
【问题讨论】:
-
阅读Modern C。见this C reference。使用GCC 调用
gcc -Wall -Wextra -g编译您的C 代码,然后使用GDB 调试器来了解您的程序的行为。如果允许,请在您的个人笔记本电脑上安装 Debian -
@BasileStarynkevitch 感谢您的建议!我总是忘记使用 GDB...我目前在使用 Linux shell 的 Windows 10 上
标签: arrays c trim c-strings function-definition