2014-01-06 45 views
0

这个程序是用来读取一个字符串并显示字符串,但它不打印出任何东西因为某些原因..功能不工作,不能找到我的错误

功能打印字符串,并使用指针读取字符串和数组:

#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'); 
} 
+3

欢迎来到Stack Overflow!请缩进您的代码以使其可读。谢谢。 –

回答

3

的display_string方法重载与C字符串(即初始化)

删除它,使其工作。

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

在功能display_string()删除行s1[i] = c;,它没有任何用处。

同时为char指定一个NULL值是不正确的。要终止阵列简单地把s[i] = 0;

1

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

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]);等。如果你使用这样的东西 - 至少发表评论。我非常怀疑,如果您必须在一个月,一年甚至更多时间内返回代码才能更改某些内容,您将会记住这意味着什么。

0

的人回答你问的问题,而是你read_string有一些缺陷: 首先,该函数不知道你的缓冲区有多大,它需要一个额外的参数:

void read_string(char *s, size_t length); 

- 这意味着,你应该的i申报改为

size_t i; 

-and此功能需要检查缓冲区指向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