c中的奇怪字符

时间:2012-06-05 23:04:38

标签: c

这是我的源代码:

#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 / c我有一堆奇怪的字符时,有人可以帮忙吗? 我谷歌有关潮红的东西,但我是新的:)

3 个答案:

答案 0 :(得分:1)

niz2的内容未初始化。它将导致未定义的行为。也许您打算将niz1复制到niz2。如果是,那么您需要反转strcpy调用中的参数。使用strcpy,第一个参数是目标。

另请注意,变量broj_znakova永远不会被初始化。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在这一行

strcpy(niz1,niz2);

我相信你的参数是反向的,它应该是strcpy(niz2,niz1);你看到的奇怪的角色是因为niz2 [81]已经分配了内存,但它并没有填充&#34;。所以,你得到任何神奇的&#39;分配可能包含的数据。也就是说,直到你把东西放进去,或者做memset等等。