【问题标题】:String length always 0字符串长度始终为 0
【发布时间】:2017-07-08 04:04:16
【问题描述】:

我正在尝试自学 C,所以我正在编写一个程序来查看一个字符串是否出现在另一个字符串的末尾。

#include <stdio.h>
#include <stdlib.h>

int containsAtEnd(char *s,  char *t);
int strlen(char *s);

int main()
{
    char *x = "tacocat";
    char *y = "bol";
    printf("%d\n", strend(x, y));
    getchar();
    return 0;
}


int strlen(char *s)
{
    int i;
    for (i = 0; i != '\0'; ++i)
        ;
    printf("%d", i);
    return i;
}

int containsAtEnd(char *s, char *t)
{
    int tlen = strlen(*t);
    int slen = strlen(*s);
    int i = 0;
    s += slen - tlen;
    while ((*s == *t) && *s != '\0')
        i++; s++; t++;
    if (i < (tlen-1))
        return 0;
    else
        return 1;
}

然而,不管主函数中给出的字符串如何,总是打印“001”,表示0中的字符串的长度和第二个字符串的长度都存在于第一个中。

【问题讨论】:

  • i != '\0' --> s[i] != '\0', int tlen = strlen(*t); --> int tlen = strlen(t);
  • 读取编译器警告!
  • while(...) --> while(...){ ...}

标签: c pointers dereference


【解决方案1】:

如果以下代码可以帮助您,请尝试。我还建议您使用 IDE 或分析程序来告诉您如何从整数中获取指针而无需强制转换和始终为真(或始终为假)的条件。

#include <stdio.h>

int containsAtEnd(char *s,  char *t);
int strlen(char *s);

int strlen(char *s)
{
    int i;
    for (i = 0; s[i] != '\0'; ++i)
        ;
    printf("%d", i);
    return i;
}

int containsAtEnd(char *s, char *t)
{
    int tlen = strlen(t);
    int slen = strlen(s);
    int i = 0;
    s += slen - tlen;
    while ((*s == *t) && *s != '\0') {
        i++; s++; t++;
    }
    if (i < (tlen-1))
        return 0;
    else
        return 1;
}

int main()
{
    char *x = "tacocat";
    char *y = "bol";
    printf("%d\n", containsAtEnd(x, y));

    char *x2 = "foobarbaz";
    char *y2 = "bar";
    printf("%d\n", containsAtEnd(x2, y2));

    getchar();
    return 0;
}

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多