增加枚举char []的指针

时间:2013-09-28 08:14:16

标签: c arrays pointers

这会产生错误的输出。

有人可以告诉我我做错了什么。显示前1,2或3个字符(取决于字符),但其余字符是随机的。

注意这只是一个学习练习&我知道有更简单的方法可以做到这一点。

int main(int argc, char *argv[])
{
  //Assume 1 arg only
  int len = strlen(argv[1]);
  char *d = malloc (strlen(argv[1])+1);
  strcpy(d,argv[1]);

  char *x;
  x = &d[0];

  int j,k;
  j = sizeof(char*);
  for (k=0;k<len;k++){
    printf("Value: %c\n\n", (*x + (k*j)));
}

3 个答案:

答案 0 :(得分:2)

你应该使用等于sizeof(char)的{​​{1}};试试这个:

1

注意:j = sizeof(char); for (k = 0; k < len; k++ ) { printf("Value: %c\n\n", *(x + k * j)); // j equals to 1 } 等于*(a + b)a[b]

答案 1 :(得分:1)

字符串中的字符之间没有sizeof(char*)个字节。您还取消引用字符串中的第一个字符,然后向其添加j*k。您应该将循环更改为

for (k=0;k<len;k++){
    printf("Value: %c\n\n", *(x + k));
}

答案 2 :(得分:1)

或者您只需使用指针算法即可:

int len = strlen(argv[1]);
char *d = (char*)malloc (len+1);
strcpy(d,argv[1]);

char*p=d;
while(*p)
        printf("Value: %c\n\n", *p++);
free(d);

您也忘记释放malloc分配的内存。您需要在结尾处致电free