1

这会产生不正确的输出。

有人可以告诉我我做错了什么。显示前 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)));
}
4

3 回答 3

2

你应该使用sizeof(char)which 等于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]b[a]

于 2013-09-28T08:20:16.953 回答
1

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

for (k=0;k<len;k++){
    printf("Value: %c\n\n", *(x + k));
}
于 2013-09-28T08:17:59.190 回答
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在最后打电话。

于 2013-09-28T08:52:11.987 回答