小编Viv*_*Jay的帖子

打印输入流中每个字母的出现次数

我有以下代码来计算输入字符串中每个字母的出现次数.while循环正确执行.现在我已经arr[]包含了'a'中的数字arr[0],'b' arr[1]等等.

但是,以下printf内容不会显示完整的内容arr.(下面给出的样本o/p).

如果我完全注释掉while循环,那么printf打印所有26个arr[]值都很好!在这个简单的程序中我能错过什么?

如果它有任何帮助,我正在使用VS 2008.

int arr[26]={'\0'};
int i = 0, c = 0, idx = 0, count = 0;
while( (c = getchar()) != EOF ) {
  if( 'a' <= c && 'z' >= c ) {
    idx = c - 'a';
    arr[idx] = arr[idx]+1;
  }
}
for(count = 0; count < 26; count++) {
  printf("arr[%d] = %d\n", count, arr[count]);
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出(对于不同的输入保持不同):

abcxyz
arr[0] = …
Run Code Online (Sandbox Code Playgroud)

c printf

1
推荐指数
1
解决办法
205
查看次数

访问冲突,memset

以下代码在运行时在第L2行引发访问冲突,这发生在第二次调用setword期间.

问:我在L2中哪里出错了,为什么第一行的第一个memset没有问题?

注意:我试图将问题区域与更大的代码隔离开来,希望这能提供足够的信息.

void setword( char ** word )
{
    if ( *word == NULL )
    {
       *word = (char *)malloc(30);
        memset( *word, '\0', 30 ); //L1: OK 
    }
    else
    {   
        memset( *word, '\0', 30 );//L2: Access violation
    }

    *word = "Hello";
    //*word shall be freed when operations are complete.
}
int main()
{
    char * word = NULL;

    setword( &word );  //Call 1: OK
    printf( "%s\n", word );

    setword( &word );  //Call 2: NOK!
    printf( "%s\n", word );
}  
Run Code Online (Sandbox Code Playgroud)

c access-violation

0
推荐指数
1
解决办法
958
查看次数

标签 统计

c ×2

access-violation ×1

printf ×1