2014-03-02 64 views
0

你好我的软件应该打印的ABC,但遗憾的是它不工作,我认为这个问题是关系到第19行,所以如果有人能告诉我为什么发生这种情况我很感激程序不打印值

我的代码 -

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

#define NUM_ABC_LET 27 

void ABC(char abc[NUM_ABC_LET]); 
int main() 
{ 
    char abcString[NUM_ABC_LET] = ""; 
    ABC(abcString); 
    puts(abcString); 
} 

void ABC(char abc[NUM_ABC_LET]) 
{ 
    char letter; 
    for (letter = 'a'; letter <= 'z'; letter++) 
    { 
     strcat(abc, letter); 
    } 
} 
+0

你不获取有关不正确的参数'strcat'警告? – Barmar

回答

0

问题是函数stdcat()需要以空字符结尾的字符串作为第二个参数。

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

#define NUM_ABC_LET 27 

void ABC(char abc[NUM_ABC_LET]); 

int main() 
{ 
    char abcString[NUM_ABC_LET] = ""; 
    ABC(abcString); 
    puts(abcString); 
} 

void ABC(char abc[NUM_ABC_LET]) 
{ 
    char letterStr[2]; 
    strcpy(letterStr, "x"); 
    for (char letter = 'a'; letter <= 'z'; letter++) { 
     letterStr[0] = letter; 
     strcat(abc, letterStr); 
    } 
} 

简单多了是这样的解决方案:

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

#define NUM_ABC_LET 27 

void ABC(char abc[NUM_ABC_LET]); 

int main() 
{ 
    char abcString[NUM_ABC_LET]; 
    ABC(abcString); 
    puts(abcString); 
} 

void ABC(char abc[NUM_ABC_LET]) 
{ 
    for (int i = 0; i < 26; ++i) { 
     abc[i] = 'a'+i; 
    } 
    // Add the terminating null character. 
    abc[NUM_ABC_LET-1] = '\0'; 
} 
1

这是因为您只是写入您传递给函数的字符串的副本。试试这个:

void ABC(char *abc) 
{ 
    int n=0; 
    char letter; 
    for (letter = 'a'; letter <= 'z'; ++letter, ++n) 
    { 
     abc[n] = letter; 
    } 
    abc[n] = '\0'; 
} 

这样,你不写入你的字符串的副本,你实际上写入字符串本身。

+1

用* char *源代码调用strcat时看不到问题?就此而言,你是否熟悉[画家的算法Shlemiel](http://www.joelonsoftware.com/articles/fog0000000319.html)? (显然OP是*不*)。总之,* ouch *。 – WhozCraig

+0

@WhozCraig哦,你是绝对正确的。哈哈 –

+0

@WhozCraig nope,从来没有听说过它。 –

0

srtcat的第二个参数应该是char *

void ABC(char abc[NUM_ABC_LET]) 
{ 
    char letter[2]="a"; 
    for (; *letter <= 'z'; (*letter)++) 
    { 
     strcat(abc, letter); 
    } 
} 
1

如果启用编译器警告(例如gcc -Wall -Wextra -Werror),它会告诉你,这个问题马上:你是在一个荒谬的方式使用strcat的。