用C编程:创建子串函数

时间:2016-10-25 06:12:00

标签: c

我在C语言编程中遇到了一个问题,它需要我创建一个带有单词的程序,一个起始位置以及要采用的单词数,并将其放入结果数组中。我在网上看过一些解决方案,但它们都使用了我无法使用的指针,因为我们尚未在该部分中使用过。

#include <stdio.h>

char substring (char source[], int start, int count, char result[])
{
  int i;

  for (i = 0; (i < count) && (source[start + i] != '\0'); ++i)
  {
    result[i] = source[start + i];
  }

  result[i + 1] = '\0';

  return result;
}

int main (void)
{
  char substring (char source[], int start, int count, char result[]);
  char source[81];
  char result[81];
  int start, count;

  printf ("Enter the word you want to check!\n");
  printf ("And the start position as well as the number of words to count!\n");
  scanf ("%s %i %i", &source[81], &start, &count);

  printf ("Your result is: %s\n", substring(source, start, count, result));
}

我在编译时遇到错误,当我修复错误时,我不会得到结果。感谢。

3 个答案:

答案 0 :(得分:2)

当您将&source[81]传递给scanf函数时,您会将指针传递给数组中的82:nd字符,该字符超出界限,导致未定义的行为

您应该将指针传递给数组中的第一个字符:&source[0]

另请注意,&source[0]等于普通source,因为数组会自然地衰减指向其第一个元素的指针。

答案 1 :(得分:1)

不要在main

中声明/原型化该函数
int main (void)
{
    char substring (char source[], int start, int count, char result[]);
    ...

相反:

char substring (char [], int, int, char []);

char substring (char source[], int start, int count, char result[])
{
   ...

如@Someprogrammerdude所述,您将数组的最后一个元素的地址:&source[81]传递给scanf,您需要传递第一个元素的地址:&source[0] (或只是source),另一个问题是你要返回一个普通的char,你要返回一个字符串,改为

char *substring (char source[], int start, int count, char result[])

答案 2 :(得分:1)

更改

scanf ("%s %i %i", &source[81], &start, &count)

scanf ("%s %i %i", source, &start, &count)

同样在该功能中,您将返回char并尝试使用%s进行打印。你应该为此返回char*。因此,函数变为,

char* substring (char source[], int start, int count, char result[])
{
  int i;

  for (i = 0; (i < count) && (source[start + i] != '\0'); ++i)
  {
    result[i] = source[start + i];
  }

  result[i + 1] = '\0';

  return result;
}