C 我的字符串比较出错了

C 我的字符串比较出错了,c,string,strcmp,C,String,Strcmp,嗨,我的程序是输入一个数字,它给出字符串的长度,然后是字符串,最后是一个字母,它应该告诉我这个字母在字符串中的次数。目前,为了帮助我找出代码的错误,我可以看到strcmp产生的是相同的ascii码,但却是负数。例如,字母a的数字是97,但strcmp给出了-97,因此strcmo不会显示字符串中的字符,并导致错误的结果。任何帮助都将不胜感激。谢谢 #包括 #包括 int main(void) { char myChar[100], z, k; int counter, n, g=0, r

嗨,我的程序是输入一个数字,它给出字符串的长度,然后是字符串,最后是一个字母,它应该告诉我这个字母在字符串中的次数。目前,为了帮助我找出代码的错误,我可以看到strcmp产生的是相同的ascii码,但却是负数。例如,字母a的数字是97,但strcmp给出了-97,因此strcmo不会显示字符串中的字符,并导致错误的结果。任何帮助都将不胜感激。谢谢 #包括 #包括

int main(void)
{
  char myChar[100], z, k;
  int counter, n, g=0, r, i, l;
  counter=0;
  scanf("%d",&n);
  while (counter<n)
  {
    counter++;
    scanf(" %c",&myChar[counter]);
  }

  scanf(" %s", &z);

  for(i=0;i<n+1;++i)
  {
    k=myChar[i];
    r=strcmp(&z, &k); 
    l=r;    
    //printf("\n%c", myChar[i]);
    printf("%d\n", l);
    if(r==0)
    {
        g++;
        printf("%d\n", g);
    }
  }
  printf("\n\n%d\n", g);


  return (0);
}
int main(无效)
{
char-myChar[100],z,k;
整数计数器,n,g=0,r,i,l;
计数器=0;
scanf(“%d”和“&n”);
而(计数器
#包括
#包括
内部主(空){
char-myChar[100],str[64]//
int计数器,n;
int i,j,k;
printf(“字符数:”);
scanf(“%d”和“&n”);

对于(i=0;i
strcmp
需要以空结尾的字符串。
&z
&k
不是空字符串,除非
z
k
都是空字符。即使在这之前,
%s
也需要存储字符串的空间。除非输入为空,否则它将超出
&k
的界限。您正在比较单个字符字符,而不是字符串。您需要返回并刷新自己关于单个字符(
char
)和字符串(以不同方式表示为
char*
char[n]
)之间的差异。这在C中非常混乱。@HotLicks:a
char*
可能指向字符串;它本身不是字符串。a“字符串”根据定义是“以第一个空字符结尾并包括第一个空字符的连续字符序列”,而不是指针。@KeithThompson-我说的是“表示”;我没有说“是”。事实上,这是问题的最大部分——C中的“字符串”并不真的存在。只是程序员的想象力使某些东西变成了“字符串”.
#include <stdio.h>
#include <string.h>

int main(void){
    char myChar[100], str[64];//
    int counter, n;
    int i, j, k;

    printf("number of charactors : ");
    scanf("%d",&n);

    for (i=0; i<n; ++i){
        scanf(" %c", &myChar[i]);
    }

    printf("input string : ");
    scanf("%63s", str);//"%s" : The useless one letter to input as a string. "%c" for &z

    for(i=0;i<n;++i){
        counter = 0;
        for(j=0;str[j]!='\0'; ++j){
            k = (str[j] == myChar[i]);//Comparison of each character
            counter += k;//if(str[j] == myChar[i]) ++counter;
        }
        printf("%c is %d\n", myChar[i], counter);
    }

    return (0);
}