【发布时间】:2014-05-15 13:31:03
【问题描述】:
所以我从一本书开始学习 C,其中一个练习是创建一个函数,该函数将采用 2 个字符串并从第一个字符串中删除第二个字符串中的字符。
我们 stile 没有了解指针,所以我想没有它们也是可能的, 但是当我尝试运行我的代码时,它的迷恋。
代码:
#include <stdio.h>
#include <string.h>
char squis(char string[], char sub[])
{
int i, c;
char ret_string[strlen(string)];
int map[strlen(string)];
for(i=0; i<= strlen(string);i++)
map[i] = -1;
for(i=0; i<= strlen(sub);i++)
{
while(string[c]!='\0')
{
if (string[c]==sub[i])
map[c] = c;
c++;
}
c=0;
}
for(i=0; i<= strlen(string);i++)
{
if (map[i]==-1)
ret_string[c++] = string[i];
}
ret_string[c] ='\0';
return ret_string[0];
}
int main()
{
char string[] = "string";
char remove[] = "sasas";
printf("%s",squis(string,remove));
return 0;
}
我是 C 的新手,所以我认为问题在于我对 C 的工作方式缺乏了解。
非常感谢您的帮助:-)
更新:似乎问题在于函数末尾的返回。
当我在函数内部打印ret_string 时,该函数似乎运行良好(除了一个使函数忽略子字符串中的第一个字符的错误,但我稍后会处理它),但是当我尝试返回数组时在主函数中打印它失败。
C中返回数组有具体的规则吗?
【问题讨论】:
-
不要忘记字符串中终止
'\0'的空间。 -
在我的头上 -
i<= strlen(string)仔细检查这个..检查索引是如何在 C 中完成的 -
尽量不要将太多的命令放在一行中,使用临时变量,学习使用 debuffer 并使用它来跟踪您的代码,逐步检查所有相关变量,以发现真正发生的事情。
-
看看你的
squis例程返回——它不是一个字符串,即使你告诉你的程序它是一个(通过在printf中请求%s)。 -
另外,
"%s"需要一个指向char的指针,即char*或char的数组,如果传递给printf(),它将衰减为一个指针)而不是@987654333 @ 本身。