功能不起作用,无法找到我的错误

时间:2014-01-06 00:39:51

标签: c

此程序用于读取字符串并显示字符串,但由于某种原因它不会打印出任何内容。

使用指针和数组打印字符串和读取字符串的函数:

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


void read_string ( char s[]);
void display_string(char s1[]);

int main()

{//begin main
    char string1[100];
    do
    {
        read_string(string1);
        puts("the string entered is \n");
        display_string(string1);
    } while(string1[0]);

    return 0;
}//end main

void read_string ( char *s)
{
    int i;
    char c;
    for( i = 0;(c = getchar())!= '\n' ; i++)
        s[i] = c;
    s[i] = NULL;
}

void display_string(char *s1)
{
    int i;
    char c;
    for (i =0; s1[i]; i++)
    {
        s1[i] = c;
        putchar(s1[i]);
    }
    putchar('\n');
}

5 个答案:

答案 0 :(得分:3)

display_string方法用c覆盖字符串(未初始化)

删除它使其有效。

void display_string(char *s1)
{
    int i;
    for (i =0; s1[i]; i++)
    {
        putchar(s1[i]);
    }
    putchar('\n');
}

答案 1 :(得分:1)

删除函数s1[i] = c;中的行display_string(),它没有任何用处。

同样为char分配NULL值是不正确的。要终止数组,只需输入s[i] = 0;

即可

答案 2 :(得分:1)

看起来你的display_string函数需要一些工作。你正在覆盖字符串的内容而不是打印它。可能值得了解如何启用更多编译器警告。您有一个明显的错误,编译器应该能够为您诊断。

答案 3 :(得分:1)

void display_string(char *s1)
{
    int i;
    char c;
    for (i =0; s1[i]; i++)
    {
        s1[i] = c;
        putchar(s1[i]);
    }
    putchar('\n');
}

在这个函数中,你用一些未定义的c值覆盖你的字符串字符,然后尝试打印出来。你应该做的就是打印出来。

另外,你的代码很难阅读,因为你的聪明才智?超过可读性这是非常非常糟糕的习惯。我的意思是while(string1[0]);等。如果你使用这样的东西 - 至少要评论它。我非常怀疑你会记住这意味着如果你必须在一个月,一年甚至更长时间内回到你的代码来改变一些事情。

答案 4 :(得分:0)

其他人回答了您要求的问题,但您的read_string存在一些缺陷: 首先,该函数不知道缓冲区有多大,它需要一个额外的参数:

void read_string(char *s, size_t length);

- 这意味着您应该将i的声明更改为

size_t i;

- 此函数需要检查s指向的缓冲区是否溢出,如:

for(i=0; i<size-1 && ( c=getchar() )!='\n'; ++i) /* ... */

getchar也可能会返回EOF,这可能无法表示为char(如果您的平台上已签署char,这甚至可能会引入未定义的行为),所以你应该将你的声明改为

int c;

并检查EOF,例如:

for(i=0; i<size-1 && ( c=getchar() )!=EOF && c!='\n'; ++i) /* ... */

和,(我不确定这是否符合标准,至少,这是令人恼火的):

s[i] = NULL;

应改为

s[i] = 0; // or '\0', if you prefer

你这里没有使用0指针。

HTH