c - 非常简单的代码中的指针问题、参数错误和一般问题

标签 c string pointers char

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

我的代码出现 2 个错误:

"Passing argument 1 of 'sortedsentance' makes pointer from integer without a cast"

expected 'char *' but argument is of type '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 没有做任何事情,但同样,为了愚蠢的指导方针。即使没有实际接收到事先的单词数,该算法也会执行其所需的功能。

任何帮助将不胜感激,我已经抓紧我的头发试图理解为什么这个非常简单的代码不起作用,以及我可能犯了什么样的愚蠢错误。

最佳答案

问题出在你的

char str1;

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

  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 - 非常简单的代码中的指针问题、参数错误和一般问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352621/

相关文章:

c++ - VC/C++裸属性有什么作用?

java - 如何理解这样的代码 pKataLengkap.replaceAll ("(.)\\1+", "$1")

c++ - C++ 中的 char 和 char* 有什么区别?

c - C语言中从字符串中删除一个字符

c - 字谜问题

c - C 函数调用约定的历史

Java String 完成数学求和

Python:如何在 PriorityQueue 中设置 __str__ 函数

C 数组指针失败

c - fanotify FAN_OPEN 读取与写入访问?