我刚开始看一下来自java背景的C语言。我很困难地把头包裹在指针周围。从理论上讲,我觉得我得到它但是一旦我尝试使用它们或者按照使用它们的程序,我很快就会迷失方向。我试图遵循字符串连续练习,但它没有工作,所以我把它剥离到一些基本的指针练习。它符合strcat函数的警告冲突类型,当我运行它时,崩溃完全崩溃。
感谢您的帮助
#include <stdio.h>
#include <stdlib.h>
/* strcat: concatenate t to end of s; s must be big enough */
void strcat(char *string, char *attach);
int main(){
char one[10]="test";
char two[10]="co";
char *s;
char *t;
s=one;
t=two;
strcat(s,t);
}
void strcat(char *s, char *t) {
printf("%s",*s);
}
答案 0 :(得分:5)
您的printf()
应如下所示:
printf("%s",s);
星号是不必要的。 %s
格式参数意味着参数应该是char*
,这是s
。使用s
对*
进行前缀会导致额外的无效间接。
您收到有关冲突类型的警告,因为strchr
是标准库例程,应具有此签名:
char * strcat ( char * destination, const char * source );
你的回复类型不同。您可能应该将您的名称重命名为mystrchr
或其他内容,以避免与标准库发生冲突(如果使用相同的名称,可能会出现链接器错误)。
答案 1 :(得分:0)
更改
printf("%s",*s);
到
printf("%s",s);
原因是printf希望替换%s
为指针。它将在内部取消引用它以获得值。
由于您将s
声明为char
指针(char *s
),因此函数中s
的类型就是那个,指向{{1}的指针}}。所以你可以直接将指针传递给char
。
答案 2 :(得分:0)
在C中,当您取消引用指针时,您将获得指针指向的值。在这种情况下,您将获得s指向的第一个字符。正确的用法应该是:
printf( "%s", s );
BTW,strcat是一个返回指向字符数组的指针的标准函数。为什么要自己制作?
答案 3 :(得分:0)
指针是变量,指向变量的地址。
#include "stdio.h"
void main(){
int a,*b;
a=10;
b=&a;
printf("%d",b);
}
在下面的代码中,您将看到一个&#39; a&#39;和一个指针&#39; 这里b被视为整数的指针,并通过给出&#39; &#39;在它之前。&#39; &#39;宣布&#39; b&#39;是一个指针。然后你会看到&#34; b =&amp; a&#34;。这意味着b正在取整数的地址&#34; a&#34;这是在特定的内存中保持值10,printf正在打印该值。