该程序不会打印值

时间:2014-03-02 11:52:45

标签: c string

您好我的软件应该打印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);
    }
}

4 个答案:

答案 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 :(得分:1)

如果您在编译器中启用了警告(例如gcc -Wall -Wextra -Werror),它会立即告诉您问题:您以无意义的方式使用strcat。

答案 2 :(得分:0)

srtcat的第二个参数应为char *

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

答案 3 :(得分: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';
}