运行C程序时出错
我正在尝试制作一个程序,将“abc”插入到字符串中。 这个代码有什么问题?我找不到错误运行C程序时出错,c,string,C,String,我正在尝试制作一个程序,将“abc”插入到字符串中。 这个代码有什么问题?我找不到错误 // Elvis’s hip and happening ABC-printing code #include <stdio.h> #include <string.h> #define NUM_ABC_LET 27 char makeABC(char abc[NUM_ABC_LET]); int main(void) { char abcString[NUM_ABC_L
// Elvis’s hip and happening ABC-printing code
#include <stdio.h>
#include <string.h>
#define NUM_ABC_LET 27
char makeABC(char abc[NUM_ABC_LET]);
int main(void)
{
char abcString[NUM_ABC_LET] = "";
makeABC(abcString);
puts(abcString);
return (0);
}
char makeABC(char abc[NUM_ABC_LET])
{
char letter = ' ';
for (letter = 'a'; letter <= 'z'; letter++)
{
strncat(abc, letter, NUM_ABC_LET);
}
return abc;
}
//猫王的臀部和ABC打印代码
#包括
#包括
#定义NUM_ABC_LET 27
char makeABC(char abc[NUM_abc_LET]);
内部主(空)
{
char abcString[NUM_ABC_LET]=“”;
makeABC(abcString);
put(abcString);
返回(0);
}
char makeABC(char abc[NUM\u abc\u LET])
{
字符字符='';
for(字母='a';字母
strncat(abc、字母、数字)
问题在于您的strncat
,第二个参数需要是常量字符串,但在这里,它是一个字符
对于您的情况,我认为最好使用snprintf
。因此,您可以在循环中使用以下内容,而不是strncat
:
int pos = letter - 'a';
snprintf(abc + pos, NUM_ABC_LET - pos, "%c", letter);
您正在传递给strncat
一个字符而不是char*(一个字符而不是它的地址)
以下是strncat原型:
char *strncat(char *dest, const char *src, size_t n);
它将n
字符从一个字符串(char*)复制到另一个字符串
strncat对您的代码所做的是尝试查找地址“a”(97)中的内容
并向您发送了一个segfault,因为地址97不属于您的程序,所以它崩溃了。
相反,您应该告诉他变量在哪里(示例2)
最重要的是理解C语言中内存是如何工作的
为此,您不需要strncat,因此这里是一个没有strncat的版本:
char makeABC(char abc[NUM_ABC_LET])
{
int x;
x = 0;
while (x < NUM_ABC_LET)
{
abc[x] = x + 'a';
x += 1;
}
return abc;
}
您在函数参数和返回类型中对待char
和char*
是一样的。了解它们之间的区别,您的问题应该得到解决。您是说代码编译时没有错误吗?如果没有,您不需要找到错误,因为编译器会帮您找到错误并告诉您如何修复。如果您在理解编译器告诉您的内容时遇到困难,然后询问一下。
char makeABC(char abc[NUM_ABC_LET])
{
char letter = ' ';
for (letter = 'a'; letter <= 'z'; letter++)
{
strncat(abc + letter - 'a', &letter, 1);
}
return abc;
}
char makeABC(char abc[NUM_ABC_LET])
{
strncat(abc, "abcdefghijklmnopqrstuvwxyz", NUM_ABC_LET);
return abc;
}