【问题标题】:pointers in c (beginner)c中的指针(初学者)
【发布时间】:2015-10-25 21:08:55
【问题描述】:

我刚开始研究 C,来自 java 背景。我很难把头绕在指针上。从理论上讲,我觉得我明白了,但是一旦我尝试使用它们或遵循正在使用它们的程序,我很快就会迷失方向。我试图进行字符串连接练习,但它不起作用,所以我将其简化为一些基本的指针练习。它符合 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);




}

【问题讨论】:

  • 打印 s,而不是 *s..
  • 啊哈,谢谢!我以为我必须使用 *s 来访问该值,而我只使用 s?

标签: c arrays pointers


【解决方案1】:

您的printf() 应如下所示:

printf("%s",s);

星号是不必要的。 %s 格式参数意味着参数应该是 char*,这就是 s。使用 * 前缀 s 会导致额外的无效间接。

您会收到有关冲突类型的警告,因为strchr 是一个标准库例程,它应该具有以下签名:

char * strcat ( char * destination, const char * source );

您的返回类型不同。您可能应该将您的重命名为 mystrchr 或其他名称以避免与标准库冲突(如果使用相同的名称,您可能会遇到链接器错误)。

【讨论】:

  • 感谢您的解释:)
【解决方案2】:

改变

printf("%s",*s);

printf("%s",s);

这样做的原因是 printf 期望将 %s 替换为指针。它将在内部取消引用以获取值。

由于您将s 声明为char 指针(char *s),因此您的函数中s 的类型将是一个指向char 的指针。所以你可以直接将该指针传递给printf

【讨论】:

    【解决方案3】:

    在 C 中,当你取消引用一个指针时,你会得到指针所指向的值。在这种情况下,您会得到 s 指向的第一个字符。正确的用法应该是:

    printf( "%s", s );
    

    顺便说一句,strcat 是一个标准函数,它返回一个指向字符数组的指针。为什么要自己制作?

    【讨论】:

      【解决方案4】:

      *s 替换为s 不会追加字符串,这里是完整的工作代码:


      注意函数urstrcat

      #include <stdio.h>
      #include <stdlib.h>
      /* urstrcat: concatenate t to end of s; s must be big enough */
      void urstrcat(char *string, char *attach);
      
      
      int main(){
      char one[10]="test";
      char two[10]="co";
      char *s;
      char *t;
      s=one;
      t=two;
      urstrcat(s,t);
      return 0;
      }
      
      void urstrcat(char *s, char *t) {
      
          printf("%s%s",s,t);
      }
      

      【讨论】:

        【解决方案5】:

        指针是指向变量地址的变量。

        #include "stdio.h"
        void main(){
          int a,*b;
          a=10;
          b=&a;
          printf("%d",b);
        }
        

        在以下代码中,您将看到一个 int 'a' 和一个指针 'b'。
        这里 b 被视为一个整数的指针,并通过在它之前给出
        '' 来声明。'' 声明 'b' 是一个指针。然后你会看到 "b=&a".this表示 b 正在获取整数“a”的地址,该地址在该特定内存中保持值 10,而 printf 正在打印该值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-04
          • 1970-01-01
          • 2013-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-03
          • 2010-09-28
          相关资源
          最近更新 更多