您好我的软件应该打印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 :(得分: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';
}