【问题标题】:Fixing C code and argument fixes from compilation error从编译错误中修复 C 代码和参数修复
【发布时间】:2018-04-12 15:52:00
【问题描述】:

我在编译代码时遇到了这些错误。另外我认为牙套的位置错误。愿你们帮助我验证我的 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;
 }
 }

【问题讨论】:

  • i 未初始化,但您仍使用它来声明您的数组 inp。之后,scanf 等待 char* 获取“%s”,但您给出 char **(是的,这是一个近似值)。去掉“&”。没有进一步阅读,您必须阅读编译器警告并修复它们。
  • 你应该学习如何缩进 C 代码。
  • 如果你的代码甚至没有编译,那么你就没有错误,你有编译错误,因此你不是在谈论调试。

标签: c arrays string gcc


【解决方案1】:

这里有个问题:

...
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 教科书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多