English 中文(简体)
取消标准C所载特征
原标题:Remove characters from string in standard C

我正在一个(乌图精确的)支气系统,我想从C的扼杀中排除主要特征(推器)。 我认为,下面的法典正在我先前的安装工作(Uubuntu一ric),但现在我发现这部法律没有再奏效(意思是,这是通用的UTF-8型特征的一部简略版本):

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{

    int nbytes = 10000;
    char *my_line, *my_char;

    my_line = (char *)malloc((nbytes + 1)*sizeof(char));

    strcpy(my_line,"	interface(quiet=true):");
    printf("MY_LINE_ORIG=%s
",my_line);

    while((my_char=strchr(my_line,9))!=NULL){
        strcpy(my_char, my_char+1);
    }
    printf("MY_LINE=%s
",my_line);

    return 0;
}

gcc -o removetab removetab.c

When executing removetab I get

MY_LINE_ORIG=   interface(quiet=true):
MY_LINE=interfae(quiet==true):

Note the dublication of "=" and the missing "c"! Whats wrong or how can I achieve this alternatively. The code should support UTF-8 strings.

最佳回答
strcpy(my_char, my_char+1);

strcpy strings must not overlap.

《标准》:

(C99, 7.21.2.3p2) “体积功能复制第2条(包括终止无效性质)所指明的体积。 如果复制在重复的物体之间发生,则不明确。

问题回答

请参看man strcpy:

DESCRIPTION
The  strcpy()  function  copies the string pointed to by src, including
the terminating null byte (  ), to the buffer  pointed  to  by  dest.
The  strings  may  not overlap, and the destination string dest must be
large enough to receive the copy.

该守则在导致腐败的同一阵列上援引了strcpy(





相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...