【问题标题】:Pointer trouble, argument errors and general trouble in a very simple code非常简单的代码中的指针问题、参数错误和一般问题
【发布时间】:2014-06-22 15:16:06
【问题描述】:

我最近接到了一个任务,要用 C 语言编写一个代码来确定单词列表是否已排序(“排序”= 所有单词在单词中按字母升序排列) 我们有许多必须遵循的准则,因此最终结果是完全愚蠢的,而不是简短而高效的代码。

我的代码出现 2 个错误:

“传递 'sortedsentance' 的参数 1 使指针从整数不进行强制转换”

预期为 'char *' 但参数是 'char' 类型

这是我的代码-

#include <stdio.h>
int sortedSentance(char *str)
{
    int i;
    for (i=1; str[i]!='0'; i++)
    {
        if ((str[i]>str[i-1])||(str[i]==33))
            continue;
        else
            break;
    }

    if (str[i]=='\0')
        return 1;
    else
        return 0;
}

int main()
{
    int num=0, val=0;
    char str1;

    printf("Please enter the number of strings of length 5 (maximum 5)\n");
    scanf("%d", &num);

    printf("Please enter %d strings\n", num);
    scanf("%s", &str1);

    val= (sortedSentance(str1));

    if (val==1)
        printf("the string %s, is sorted.", str1);
    else
        printf("the string %s, is not sorted.", str1);

    return 0;
}

注意事项:

  1. 我们的指导方针是,函数必须这样声明,我知道应该以不同的方式进行。
  2. 我知道变量num 没有做任何事情,但同样,为了愚蠢的指导方针。即使事先没有实际接收到字数,该算法也能实现所需的功能。

任何帮助都将不胜感激,我已经抓狂地试图弄明白为什么这个非常简单的代码不起作用,以及我会犯什么样的愚蠢错误。

【问题讨论】:

  • 仅供参考 sortedSentance 应该是 sortedSentence
  • 您将char str1 声明为单个字符。您不能将多个字符串读入一个字符。 (而且我不确定您是否能够称您的指导方针“愚蠢”。)
  • 我还没有看到你的作业,但对我来说有问题。如果您要检查单词列表并获得num,那么您为什么只阅读一个字符串?
  • 函数名称是从工作表中复制粘贴的。拼写错误最初就在那里(如果我修复它 - 自动检查系统会将其标记为错误,我会得到更少的分数)......这也是我没有得到的,我们的输入文件例如,通过空格分隔单词,而不是通过使用 scanf 读取每个单词然后输入。 num 几乎没有任何作用,因为该程序适用于任何数量的由空格分隔的单词。我忘记通过定义添加尺寸并将其包含在内,将尝试并报告。

标签: c string pointers char


【解决方案1】:

问题在于你的

char str1;

您尝试使用单个 char,但在您的函数中,它接受指向 char 数组的指针。这是你有两个选择的问题。

  1. char str1[100];//这100可以根据你的需要改变

2.

char * str1 = new char[100];//This 100 could be changed according to your needs

在第二种情况下,两者都可以工作并记住在 str1 上调用 delete [] 运算符。

此外,我没有查看您程序的逻辑正确性。刚刚解决了您的编译错误。

附: 由于解决方案需要在 C 中,

你可以使用

char * str1 = malloc(sizeof(char)*(100));

【讨论】:

  • C 中没有 new
  • @DCoder 然后使用 malloc 和 free
【解决方案2】:

您应该为字符串分配内存,而不是 char str1;,它是单个字符的持有者,您可以选择:

  • 静态内存分配char str1[100];

  • 动态内存分配char *str1 = (char*) malloc(sizeof(char) * 100);

附:您不必将字符串的地址传递给scanf,因为str1 本身就是一个地址,因此请写scanf("%s", str1); 而不是scanf("%s", &amp;str1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多