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表示文件的结尾,所以假设您正在使用文件获取信息。但实际上,它们是相同的,但必须用于不同的情况。