2013-09-28 42 views
1

这会产生不正确的输出。增量指针来枚举的char []

有人能告诉我什么,我做错了。显示前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

你想做什么? – Rohan

+0

'的sizeof(字符*)'是一个指针的大小,你需要的是一个'char','的sizeof(char)的' – pNre

+1

@pNre哪个反正没用,大小自'的sizeof(char)的'有保证以标准为'1'。当然 –

回答

2

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

+0

需要注意的是'的sizeof(char)的'保证是1,因此你不需要使用'j'所有 – simonc

+0

@simonc正如他所说,这是一个**学习锻炼**不是一个真正的程序 –

+1

@ABFORCE所以@simonc注释因为这是一个新手应该很快学会的东西(否则他的真实代码可能会被sizeof(char)'抛弃)。 –

1

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

for (k=0;k<len;k++){ 
    printf("Value: %c\n\n", *(x + k)); 
} 
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

+0

可以这样做吗? 'if(* p ++ =='a')'@Zoltan – ojhawkins

+0

是的,你可以。它会比较p指向的字节值和'a'的字节值,然后递增p指向字符串中的下一个字符。while循环将停止在终止的'\ 0'(空)字符处并按照预期退出。 – Zoltan