2012-07-15 139 views
0

我正在学习C ..来自C#背景我发现它大部分非常容易转换为..指针但是证明相当麻烦..我创建了一个小测试应用程序(请参阅下面)通过指针连接2个字符串。我得到这个错误:C:字符串通过指针级联

error: invalid type argument of unary '*' (have 'int') 

我该如何解决这个问题?

void concatTest(); 

int main() 
{ 
    concatTest(); 

    system("PAUSE"); 
    return 0; 
} 

void concatTest() 
{ 
    char string1[20], string2[20], string3[40]; 
    char *ptr1, *ptr2, *ptr3; 
    ptr1 = &string1[0]; 
    ptr2 = &string2[0]; 
    ptr3 = &string3[0]; 
    int i; 

    printf("You need to enter 2 strings.. each of which is no more than 20 chars in length: \n"); 

    printf("Enter string #1: \n"); 
    scanf("%s", string1); 

    printf("Enter string #2: \n"); 
    scanf("%s", string2); 

    int len1 = strlen(string1); 
    int len2 = strlen(string2); 

    for (i = 0; i < len1; i++) 
    { 
     *ptr3[i] = *ptr1[i]; 
    } 
    for (i = len1; i < len1 + len2; i++) 
    { 
     *ptr3[i] = *ptr2[i]; 
    } 
    //TODO: show concatenated string on console 
} 
+0

您应该在这里使用'scanf(“%20s”,string1)''。 – 2012-07-15 23:39:27

+0

你的第二个循环是不正确的,你需要从第二个字符串的开头开始复制(但仍然追加到最后一个字符串的末尾)。 – Neil 2012-07-15 23:50:08

回答

2

ptr1[i]已经解除对数组的引用。也不需要使用*

[但是,即使您解决了这个问题,您的代码仍然存在问题;您没有考虑到空终止符。]

+0

谢谢Oli提供了这样一个快速简洁的答案。我有另一个关于null终止字符串在这里:http://stackoverflow.com/questions/11496624/c-string-concatentation-null-terminated-strings – Matt 2012-07-15 23:53:49

-2
the name of array as a point 
ptr1 = string1; ptr1 point at the array string1,so ptr1[i] is just like string1[i] 

ptr1 = string1; 
ptr2 = string2; 
ptr3 = string3; 
+0

添加一些文本可能会帮助我们理解你想说什么! – Swanand 2012-07-16 05:23:39

+0

非常差的评论,莫尔具体和你的评论清楚 – 2012-07-16 12:48:35