1

我正在尝试编写一个从字符串中提取多个字符并将其分配给另一个字符串的函数。

编码:

// Problem 10.4
// String extraction function

#include <stdio.h>

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

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

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

int main (void)
{
    void substring (char source[], int start, int count, char result[]);
    char source[] = "character", result[80];
    int start, count;

    substring(source[], 4, 3, result[]);

    printf("%s\n", result);

    return 0;

}

Xcode告诉我这条线

substring(source[], 4, 3, result[]);

是“期待一个表达式”,它不会让我编译。

我很困惑,因为我的函数没有返回任何值(它在自身内部进行字符串赋值,因为它是一个字符串,这不意味着指针被传递给函数吗?在这种情况下,这并不意味着字符串本身正在被修改而不是本地副本?如果正在修改原始字符串,为什么我必须返回一个值?)

我不完全确定问题出在哪里,尽管我怀疑这与我没有在语法上将指针传递给我的函数这一事实有关。

提前感谢您提供的任何见解。

4

3 回答 3

3

这不是将数组传递给函数的方式。

您正在使用 source[] 这个 '[]' 不是必需的。

数组在 C 中作为引用传递。当你传递一个数组 source[] (fun(source)) 时,它的基地址将被传递给函数,就像使用指针的情况一样。

substring(source, 4, 3, result);

此外,您的代码通过调用上述调用导致“aaaa”。您需要在循环中增加起始变量,如果您的意思是 start=4,请不要忘记索引从 0 开始,它从第 5 个字符“a”开始并导致“acte”。

代码:

    // Problem 10.4
// String extraction function

#include <stdio.h>

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

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

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

int main (void)
{
    void substring (char source[], int start, int count, char result[]);
    char source[] = "character", result[80];
    int start, count;

    substring(source, 4, 3, result);

    printf("%s\n", result);

    return 0;

}

一切顺利...

于 2013-05-25T15:38:51.897 回答
1
void substring (char source[], int start, int count, char result[])
{
    int i;

//  for (i = 0; i <= count; ++i) {
//      result[i] = source[start];
    for (i = 0; i < count; ++i) {
        result[i] = source[start++];//start++ or start + i
    }

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

int main (void)
{
//    void substring (char source[], int start, int count, char result[]);
    char source[] = "character", result[80];
//    int start, count;

//    substring(source[], 4, 3, result[]);
    substring(source, 4, 3, result);

    printf("%s\n", result);

    return 0;

}
于 2013-05-25T15:59:07.187 回答
0

source[]不是一个有效的表达式,它是一个有效的数组标识符声明,仅此而已。

您需要将正确的参数传递给函数,其类型为char[]

substring(source, 4, 3, result);
于 2013-05-25T15:34:07.560 回答