C 스트링에서 첫 번째 캐릭터를 제거하는 방법?
누가 저를 도와주실 수 있습니까?첫 번째 캐릭터를 제거해야 합니다.char *주식회사.
예를들면,char * contents가 들어있습니다.'\n'배열의 첫 번째 문자로서 문자.이 문자를 탐지하고 제거해야 합니다. 원래 변수를 "위생"한 후 수정해야 합니다.
암호를 푸는 것을 도와줄 사람?저는 C를 완전히 처음 접했는데 도저히 이해할 수가 없는 것 같습니다.
if (contents[0] == '\n')
memmove(contents, contents+1, strlen(contents));
또는 포인터를 수정할 수 있는 경우:
if (contents[0] == '\n') contents++;
char* contents_chopped = contents + 1;
그러면 다음과 같은 결과가 나옵니다.contents_chopped동일한 문자열을 가리키며, 첫번째 문자가 \n 다음 문자가 되는 것을 제외합니다.
또한 이 방법이 더 빠릅니다.
메모리가 멀록(malloc)되어 있으면 포인터를 늘리지 마십시오. 그렇지 않으면 프로그램이 중단됩니다.free는 원래의 포인터가 필요합니다.포인터를 복사하거나 메모리 덩어리를 새로 만들고 메모리를 메모리에 저장하거나 ptr+1 또는 여러 가지 다른 방법으로 액세스할 수 있지만 포인터를 늘린다고 말하는 사람들이 위험한 조언을 해주고 있습니다.이 샘플 프로그램을 실행하여 " 포인터만 증가"하면 어떻게 되는지 확인할 수 있습니다.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = (char *)malloc(10);
strcpy(str, "1234567890");
printf("%s\n", str);
str++;
printf("%s\n", str);
free(str);
}
힌트: 결과는 다음과 같습니다.
[mfisch@toaster ~]$ ./foo
1234567890
234567890
*** glibc detected *** ./foo: free(): invalid pointer: 0x08c65009 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x724591]
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0x725de8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x728ecd]
./foo[0x80484e3]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x6cfbd6]
./foo[0x80483f1]
======= Memory map: ========
001c9000-001e4000 r-xp 00000000 08:01 2883609 /lib/ld-2.11.1.so
001e4000-001e5000 r--p 0001a000 08:01 2883609 /lib/ld-2.11.1.so
001e5000-001e6000 rw-p 0001b000 08:01 2883609 /lib/ld-2.11.1.so
006b9000-0080c000 r-xp 00000000 08:01 3015690 /lib/tls/i686/cmov/libc-2.11.1.so
0080c000-0080d000 ---p 00153000 08:01 3015690 /lib/tls/i686/cmov/libc-2.11.1.so
0080d000-0080f000 r--p 00153000 08:01 3015690 /lib/tls/i686/cmov/libc-2.11.1.so
0080f000-00810000 rw-p 00155000 08:01 3015690 /lib/tls/i686/cmov/libc-2.11.1.so
00810000-00813000 rw-p 00000000 00:00 0
00e4d000-00e4e000 r-xp 00000000 00:00 0 [vdso]
00fe0000-00ffd000 r-xp 00000000 08:01 2883667 /lib/libgcc_s.so.1
00ffd000-00ffe000 r--p 0001c000 08:01 2883667 /lib/libgcc_s.so.1
00ffe000-00fff000 rw-p 0001d000 08:01 2883667 /lib/libgcc_s.so.1
08048000-08049000 r-xp 00000000 08:01 9700477 /home/mfisch/foo
08049000-0804a000 r--p 00000000 08:01 9700477 /home/mfisch/foo
0804a000-0804b000 rw-p 00001000 08:01 9700477 /home/mfisch/foo
08c65000-08c86000 rw-p 00000000 00:00 0 [heap]
b7600000-b7621000 rw-p 00000000 00:00 0
b7621000-b7700000 ---p 00000000 00:00 0
b776f000-b7770000 rw-p 00000000 00:00 0
b7780000-b7783000 rw-p 00000000 00:00 0
bfc22000-bfc37000 rw-p 00000000 00:00 0 [stack]
Aborted
마치 문자에 문자가 포함되어 있다는 인상을 받은 것처럼 들립니다.아니다.그것은 단지 바이트를 가리킬 뿐입니다.나머지 문자열은 다음 null 바이트까지 메모리의 후속 바이트로 구성됩니다.('char' 데이터 유형이 바이트이긴 하지만 정의상 실제로 문자가 아님을 알아야 합니다. 유니코드도 알고 있고 바이트가 반드시 옥텟일 필요도 없습니다.)
char*는 배열이 아니지만, 포인터가 배열의 시작 부분을 가리키는 문자 배열이 존재할 수도 있습니다.
#include <stdio.h>
#include <string.h>
int main ()
{
char src[50] = "123456789123434567678";
char dest[16]={0};
memcpy(dest, src+1,sizeof(src));
printf("%s\n",dest);
return(0);
}
src+1 -> indicate how many char you want to remove
캐릭터를 찾으면 기본적으로 캐릭터를 무시하고 루프를 계속합니다.
void remove_character(char* string, char letter) {
int length = strlen(string);
int found = 0;
for (int i = 0; i < length; ++i)
{
if (string[i] == letter)
{
found = 1;
continue;
}
if (found == 1)
{
string[i-1] = string[i];
}
}
if (found == 1)
{
string[length - 1] = '\0';
}
}
여기 내 코드가 있습니다.
char * bastakiniSil(char *contents){
char *p = malloc( sizeof(*p) * strlen(contents) );
int i;
for(i=0; i<strlen(contents); i++)
{
p[i]=contents[i+1];
}
return p;
}
여기 내 코드가 있습니다.
아주 간단합니다.
#include <stdio.h>
#include<stdlib.h>
int main()
{
char *str=(char *)malloc(100*sizeof(char));
scanf("%s",str);
str=&str[1];
printf("%s",str);
return 0;
}
str=&str[1] // 여기서 1은 제거할 문자 수를 나타냅니다.
언급URL : https://stackoverflow.com/questions/4295754/how-to-remove-first-character-from-c-string
'programing' 카테고리의 다른 글
| RecyclerView 항목이 나타날 때 해당 항목을 애니메이션화하는 방법 (0) | 2023.10.26 |
|---|---|
| WooCommerce 무료배송 라벨 맞춤 기능 (0) | 2023.10.26 |
| Oracle : 날짜를 시간 단위로만 비교합니다. (0) | 2023.10.26 |
| C/C++의 더블을 통해 운반할 때 Float의 보존이 보장됩니까? (0) | 2023.10.26 |
| PHP에서 두 번의 시차를 구하는 중 (0) | 2023.10.26 |