Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的奇怪字符_C - Fatal编程技术网

c语言中的奇怪字符

c语言中的奇怪字符,c,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; }

这是我的源代码:

#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);
}
#包括
#包括
void main()
{
int broj_znakova,i=0;
炭niz1[81],niz2[81];
printf(“输入某物,用于结束Ctrl/c\n\n”);
while(fgets(niz1,81,stdin)!=NULL)
{
继续;
}
printf(“您只需输入:%s\n”,niz1);
printf(“此字符串的长度为%d\n”,(strlen(niz1)-1));
strcpy(niz1,niz2);
printf(“niz2是%s\n”,niz2);
if(strcmp(niz1,niz2)==0)
{
printf(“niz1和niz2相同\n”);
}
其他的
{
printf(“niz1!=niz2\n”);
}
而(niz1[i]!='\n')
{
if(niz1[i]='')
{
broj_znakova++;
i=i+1;
}
}
printf(“字符串中的空格=%d\n”,broj_znakova);
}
当我按下Ctrl/c键时,我看到一堆奇怪的字符,有人能帮我吗???
我在谷歌上搜索了一些关于法拉盛的信息,但我是新来的:)

niz2的内容没有初始化。这将导致未定义的行为。也许你想把
niz1
复制到
niz2
。如果是这样,则需要反转
strcpy
调用中的参数。对于strcpy,第一个参数是目标

还要注意的是,变量broj_znakova从来没有初始化过。

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

在这一行

strcpy(niz1,niz2);

我相信你的参数是相反的,它应该是strcpy(niz2,niz1);您看到的奇怪字符是因为niz2[81]分配了内存,但没有“填充”。因此,您可以获得分配可能包含的任何“神奇”数据。也就是说,直到您在其中放入某些内容,或执行memset等操作。

Ctrl+C通常会终止您的进程;你应该按Ctrl+D来关闭stdin。我尝试了Ctrl+D,但也没有尝试Ctrl+x nothin,但Crtl+c对我有用,但我的niz1有太多的stange字符,所以我在strcpy中替换了它,但我需要知道为什么我的niz1在Ctrl之后存储一些奇怪的字符+c@StefanCvetkovic:我无法复制奇怪字符的打印。而且(正如dasblinkenlight在评论中所说的那样),ctrl+c序列会终止进程,因此如果我按该组合键,则不会打印任何内容。while(fgets(niz1,81,stdin)!=NULL)和while(fgets(niz1,81,stdin)!=EOF)是否相同?非常相似。NULL表示字符串和其他流,而EOF表示文件的结尾,所以假设您正在使用文件获取信息。但实际上,它们是相同的,但必须用于不同的情况。