【问题标题】:C - Writing strings in a function. Error:expected expressionC - 在函数中写入字符串。错误:预期的表达式
【发布时间】:2013-05-25 15:31:42
【问题描述】:

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

代码:

// 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[]);

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

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

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

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

【问题讨论】:

  • 首先,为什么main()中有void substring (char source[], int start, int count, char result[]);,第二次尝试substring(source, 4, 3, result);而不是substring(source[], 4, 3, result[]);
  • 考虑学习有关数组和指针的适当教程:pweb.netcom.com/~tjensen/ptr/pointers.htm

标签: c string function pointers


【解决方案1】:

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

你正在使用 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;

}

一切顺利……

【讨论】:

    【解决方案2】:
    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;
    
    }
    

    【讨论】:

      【解决方案3】:

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

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

      substring(source, 4, 3, result);
      

      【讨论】:

        猜你喜欢
        • 2014-01-01
        • 1970-01-01
        • 2019-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 2020-12-15
        • 2016-06-02
        相关资源
        最近更新 更多