我在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));
}
我在编译时遇到错误,当我修复错误时,我不会得到结果。感谢。
答案 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;
}