2

所以我在鬼混strchr以从文件中获取字符串的一部分:

void manipulateComputers(char *name)
{
    name[strlen(name)-2] = '\0';
    printf("%s\n", name);

    char *ptr = strchr(name, ' ');
    printf("%s\n", ptr); 
}

一开始是printf这样写的: zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1

在第二个printf它写道: 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1

正如你所看到的,zelda它已经消失了,这正是我想要做的。我想删除zelda,但现在我想使用zelda.

本质上,我希望第二个printf只打印zelda而不是没有zelda. 我如何掌握它zelda以最终将其传递给另一个函数。谢谢

4

3 回答 3

3

你没有输zelda;指针name仍然指向它。

zelda您可以使用(在其他技术中)打印:

int z_len = ptr - name;
printf("Zelda was here: %*.*s\n", z_len, z_len, name);

与许多替代方法相比,这种技术的优势在于原始字符串仍然是完整的——未修改。这意味着它也适用于字符串是const字符串时,例如字符串文字。

于 2016-01-26T06:10:33.443 回答
1

您可以将其复制到另一个字符串,也可以使用以下技巧:

char *ptr = strchr( name, ' ' );
if( ptr )
{
    char old_val = *ptr;      /* Remember the old character (in this case we know it was ' ') */
    *ptr = '\0';              /* Terminate the sub-string */
    printf( "%s\n", name );
    *ptr = old_val;           /* Restore the original character */
}
于 2016-01-26T06:06:19.777 回答
0
#include<stdio.h>
#include<string.h>

int main()
{

char newarray[40];
char* array="zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1";
printf("Orignal is :%s \n",array);
char *ptr = strchr(array, ' ');
if(ptr != NULL)
{
printf("%s\n", ptr);
if((ptr-array) < 40){
        strncpy(newarray,array,(ptr-array)*sizeof(char));
        newarray[(ptr-array)] = '\0';
        printf("Filtered string is :%s",newarray);
}
}
return 0;
}

所以这里的想法是你有字符串的起始地址,现在你也有字符串的那部分结束的地址。因此,让我们将那么多字符串复制到另一个数组中并进一步使用它。当我跑步时

./a.out 
Orignal is :zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1 
 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
Filtered string is :zelda
于 2016-01-26T06:11:46.200 回答