c - 修复 C 代码和参数修复编译错误

标签 c arrays string gcc

当我编译代码时遇到这些错误。我也认为牙套位置错误。你们可以帮助我验证 for 循环的格式是否正确并调试代码。我的代码的目的是显示重复的字母和重复字母的出现。

这是编译错误:

secfun@ubuntu:~/Downloads$ gcc -Wall -Werror -o -ansi letter.out   letter.c -lm
letter.c: In function ‘main’:
letter.c:14:1: error: format ‘%s’ expects argument of type ‘char *’, but   argument 2 has type ‘char (*)[(sizetype)(i)]’ [-Werror=format=]
scanf("%s", &inp);
^
letter.c: At top level:
letter.c:22:1: error: expected identifier or ‘(’ before ‘{’ token
{
^
letter.c:46:1: error: expected identifier or ‘(’ before ‘{’ token
{
 ^
 cc1: all warnings being treated as errors

这是我的代码:

#include <stdio.h>
#include <string.h>

 void printDuplicate(const char inp[], char duplicate);
 void printOccurrence(const char inp[], char occurrence);

 int main(void)
 {
 int i;
 char inp[i];
 char duplicate;
 char occurrence; 
 printf("Enter a word:\n");  
 scanf("%s", &inp);
 printf("Duplicate letter: %c, Occurences: %c", duplicate, occurrence);
 printDuplicate(inp, duplicate);
 printOccurrence(inp, occurrence);
 return 0;
 }

 void printDuplicate(const char inp[], char duplicate);
 {

  int i, j;
  int k=1;

  /* For loop finding duplicate characters */ 

  for (i = 0; i < duplicate; i++) 
  { 
  for (j = i + 1; j < duplicate; j++)
  {
  if (inp[i] == inp [j])
  {
  if (k == 1 && inp[j] != '\0')
  {
  inp[j] = '\0';
  k++;
  }
  k=1;
  }
  }
  }
  }

  void printOccurrence(const char inp[], char occurrence);
  {

  int freq = 0;

  for(i = 0; inp[i] != '\0'; ++i)
  {
  if(occurrence == inp[i])
  ++freq;
 }
 }

最佳答案

这里有一个问题:

...
int i;          // here i is not yet initialized, it contains an undetermined value
char inp[i];    // so here you declare an array with an 
                // undetermined length which is not good
...

然后在该行的末尾有一个额外的 ; (您打算在其中定义函数):

void printDuplicate(const char inp[], char duplicate);
                                                     ^ remove this

这里也一样:

void printOccurrence(const char inp[], char occurrence);

那么 i 根本没有在 printOccurrence 中声明。

这也是错误的:

scanf("%s", &inp);

你需要这个:

scanf("%s", inp);

inp 已经是一个指向 char 的指针。

最后但并非最不重要的一点:这是无效的,因为 inp[]const

inp[j] = '\0';

可能还有更多问题。

你可能应该回到你的 C 教科书。

关于c - 修复 C 代码和参数修复编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49800939/

相关文章:

在 Cygwin 上创建核心转储

c - 如果新 block 大小小于初始 block 大小,我应该强制执行 realloc 检查吗?

arrays - 按内部数组值查找的 Ruby 数组数组

java - 字典序最小排列,使得所有相邻字母都不同

javascript - 如何从自定义的 forEach 函数中获取返回值以在回调中使用?

string - 替换查询语句中的特殊字符?

c - 为什么这四个并行线程在CPU上的负载不相等

c - 如何在Linux中覆盖控制台输出

python - 字符串如何连接?

c++ - 具有低冲突率的 32 位整数的快速字符串散列算法