【发布时间】:2014-06-12 10:23:07
【问题描述】:
char *substring(char *string, int index, int length)
{
//int counter = length - index;
int counter = 0;
for(;string[index] != string[length];index++, counter++);
printf("\n%d\n", counter);
char *array = malloc(sizeof(char) * counter);
if(array != NULL)
{
///while(string[index] != string[length])
while(index != length)
{
array[index] = string[index];
index++;
array++;
}
}
else
puts("Dynamic allocations failed\n");
return array;
}
1 - 我已经用“长度 - 索引”注释掉了初始化计数器,因为我觉得它不舒服(我也有点喜欢循环的一行:))。那么,如果我以这种更简单的方式使用它,我可以指望计数器吗?
2 - 我对这段代码的问题是它没有返回任何东西。我尝试打印结果,但没有打印任何内容,当我将函数的结果分配给 char * 时,我收到一条错误消息,提示我无法将 void 分配给 char *。但是它是如何返回 void 的呢?
3 - 我可以用指针算术编写这个函数并且根本没有任何数组索引吗?!
4 - 我可以改变 char *array 吗?!。我问这个是因为我认为 char * 不能被变异,但我已经阅读了正确变异 char * 的代码。还是我混淆了常规 char * 和字符串?
注意:我不想使用字符串库函数
【问题讨论】:
-
string[index] != string[length]dis 实际服务的目的是什么? -
memcpy 怎么样?还是strncpy?不确定这些是否算作“字符串库函数”,尽管它们完全符合您的要求并且通常会更快。
-
@GoldRoger:它的作用与它后面的 while 语句相同。但是由于第二个 while 循环工作得很好而且更简单,所以我把它注释掉了。
-
@Thomas:它仍然是一个库函数。我还没有正确研究图书馆功能。这就是我不想使用它们的原因。
-
发布了一个不使用任何库但 malloc 和 free 的工作示例。