我正在尝试创建此程序:
#include <stdio.h>
void suffix(char str[], char c);
int main()
{
char ch;
char str[100] ="abcdefgabcd";
ch=c;
suffix(str,ch);
return 0;
}
void suffix(char str[], char c)
{
int length;
int i;
int j;
int counter=0;
for (length=0; str[length]!='\0';)
{
length++;
}
for(i=0;i<length;i++)
{
if(str[i]==c)
{
counter++;
/* print */
for(j=i; j<length;j++)
{
printf("%s",str[j]);
}
printf("\n");
}
}
我想在main
和suffix
函数之间建立链接,因此我将参数数据类型添加为变量c
。
现在在main
程序中,我必须将后缀与参数链接,因此我创建了一个名为ch
的变量,该变量将c
的值存储在后缀上。
现在,要做到这一点,我必须在main
上调用后缀,但我必须用它的参数调用它(否则我会得到too few arguments in function call
)。
但是,如果我想调用后缀,我必须在c
中存储ch
,但我不能这样做,因为main不知道后缀。
这是一个“拖延的问题”,我无法做到各方面,因为每个方面都有错误
我怎么解决这个问题?
提前谢谢。
答案 0 :(得分:1)
C中的参数不能被子程序修改,但您可以提供这些参数的地址;子程序可以修改提供的地址的内存。这被称为“指针”,它是一个无法在堆栈溢出帖子中充分教授的主题。
总结一下如何在这种情况下使用指针,你可以将子程序的调用签名更改为:void suffix(char str[], char *c)
(注意c变量旁边的*
);您可以将main
中的来电更改为:suffix(str, &ch);
(发送ch
变量的地址),并在{{更改c
变量的所有用途1}}为suffix
(而不是查看*c
,您现在正在查看c
指向的内容。
这个主题过于复杂而无法从帖子中学习的原因之一是:指针在误用时很危险,当你不知道自己是什么时很容易误用它们这样做!滥用指针可能会导致程序崩溃,有时候原因不明显,并且可能导致程序中的其他数据以您不想要的方式更改(这可能会间接导致崩溃,或者只是导致错误的结果)
c
答案 1 :(得分:0)
为什么不使用string.h,它是标准的 strcat()完全符合您的要求。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char str1[13] = "abcdef";
char str2[7] = "uvwxyz";
strcat(str1, str2);
printf("%s\n", str1);
return 0;
}