这会产生错误的输出。
有人可以告诉我我做错了什么。显示前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)));
}
答案 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
。