0

どうやら、このプログラムを自分のコンピューターでコンパイルすると、うまくいくようです。ただし、別のコンパイラでは、セグメンテーション違反エラーが発生します。ここではポインターを使用しましたが、間違って使用した可能性がありますが、論理的にはすべてがエラーなしで機能するはずです。誰かがいくつかのエラーを指摘できれば、それは大歓迎です。

contains.c

#include <string.h>

int contains(char *s, char *t)
{
    if (!t)
        return 0;

    if (!*t)
        return 0;

    if (s)
    {
        char *k;
        int n = 0;
        int l = t;
        int len = strlen(t);
        int counter = 0;

        printf("%d", len);

        for(k=s; *k; k++)
        {

            printf("S: %c ", *k);
            printf("T: %c ", *t);
            if (*k == *t)
            {
                printf("Si: %c ", *k);
                printf("Ti: %c ", *t);
                t++;
                counter++;
            }
            else
            {
                counter = 0;
                t = l;
                if (*k == *t)
                {
                    t++;
                    counter++;
                    printf("Si: %c ", *k);
                    printf("Ti: %c ", *t);
                }

            }

            printf("%d\n", len);
            printf("%d", counter);
            if (counter >= len)
            {
                    n++;
                    t = l;
                    counter = 0;
                    if (*k == *t)
                    {
                        t++;
                        counter++;

                        printf("Si: %c ", *k);
                        printf("Ti: %c ", *t);
                    }
            }
        }

        return n;
    }
    else
        return 0;



}

main.c

#include <stdio.h>

int contains(char *s, char *t);

int main(void)
{
  printf ("%d\n", contains ("I wanna shoot something!", "thing"));
  printf ("%d\n", contains ("Let's get in range!", "ge"));
  printf ("%d\n", contains ("Wanna see the fireworks?", "wanna"));
  printf ("%d\n", contains ("Look at the pretty explosions!", " "));
  printf ("%d\n", contains ("Kaboom!", ""));

  printf ("%d\n", contains ((char *) 0, "aaa"));
  printf ("%d\n", contains ("aaa", (char *) 0));
  printf ("%d\n", contains ((char *) 0, (char *) 0));

  return 0;
}
4

1 に答える 1

3

整数をポインターに、ポインターを整数に割り当てます。少なくとも間違っています:

int l = t;
...
t = l
于 2013-11-15T07:32:34.220 に答える