3

这是我的源代码:

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

void main()
{
    int broj_znakova,i=0;
    char niz1[81],niz2[81];

    printf("Enter something, for end Ctrl/c \n\n");
    while(fgets(niz1,81,stdin)!=NULL)
    {
        continue;
    }
    printf("You just enter: %s \n",niz1);
    printf("This string is long %d\n",(strlen(niz1)-1));
    strcpy(niz1,niz2);
    printf("niz2 is %s\n",niz2);
    if(strcmp(niz1,niz2)==0)
    {
        printf("niz1 and niz2 is same\n");
    }
    else
    {
        printf("niz1 != niz2\n");
    }
    while(niz1[i]!='\n')
    {
        if(niz1[i]==' ')
        {
            broj_znakova ++;
            i=i+1;
        }
    }
    printf("Spaces in string = %d\n",broj_znakova);
}

当我按 Ctrl/ci 有一堆奇怪的字符,有人可以帮忙吗???我在谷歌上搜索了一些关于冲洗的信息,但我是新手 :)

4

3 回答 3

1

的内容niz2未初始化。这将导致未定义的行为。也许您的意思是复制niz1niz2. 如果是这样,那么您需要反转strcpy调用中的参数。有了strcpy,第一个参数就是目标。

还要注意,该变量broj_znakova永远不会被初始化。

于 2012-06-05T23:13:37.593 回答
1

C 不会将内存中的信息“归零”(通常),因此当它分配变量时,如果您在没有系统的情况下打印某些东西,那么您会得到当时内存中的任何内容(无论它是否在逻辑上可读为单词)知道这是一个字符串,那么它将继续打印,直到遇到 NULL 终止字符,如果没有,它会尝试打印内存中的任何内容,这会产生奇怪的字符。

于 2012-06-05T23:14:59.287 回答
0

在这条线上

strcpy(niz1,niz2);

我相信你的参数是相反的,它应该是 strcpy(niz2, niz1); 您看到的奇怪字符是因为 niz2[81] 分配了内存,但它没有“填充”。因此,您可以获得分配可能包含的任何“神奇”数据。也就是说,直到你把东西放进去,或者做 memset 等等。

于 2012-06-05T23:19:20.007 回答