C函数返回的指针不等于字符串

时间:2019-05-05 07:45:24

标签: c

好的,我知道这很简单,但是我不明白这里发生了什么。此函数接收一个应该是打印机状态消息的字符串,然后循环遍历该字符串,如果该字符串仅包含字母“ a”-“ m”,则应认为它是“无错误”状态。如果它包含其他字母,则将是“错误消息”。

以分数形式返回结果,其中分子是错误字符的数量,分母是字符串中字符的总数。

示例:“ aabb”应返回“ 0/4”, “ azaz”应返回“ 2/4”

我认为正在发生的事情是返回的指针比输入字符串长,所以当我使用strcmp()时,表明它们不相等。它们看起来相同,但是您会在输出中看到返回的ptr上有一些尾随空格。

我还应该提到我正在使用xcode作为我的IDE,我认为它使用的是c99

无论如何,这里是代码,感谢您的宝贵时间。

#include <stdio.h>
#include <string.h>

char* printerError(char *s)
{
    int i, string_size, error_total;
    unsigned long int size = strlen(s);

    char status[size];
    char *ptr;

    string_size = error_total = 0;
    for (i=0; i<size; i++)
    {
        string_size++;
        if (s[i] > 'm')
            error_total++;
    }

    sprintf(status,"%d/%d\n", error_total, string_size);

    printf("status = %s\n", status);
    ptr = status;
    printf("ptr = %s\n", ptr);

    return ptr;
}

int main(void) {

    if (strcmp("2/4", printerError("xacz"))!= 0)
        //Here is where you can see the problem i'm having
        printf("2/4 and %s are Not Equal\n", printerError("xacz"));
    else
        printf("equal\n");
    //This is how it should look if they weren't equal
    printf("2/4 and 2/4 are not equal\n");
    return 0;
}

0 个答案:

没有答案