2012-02-05 40 views
9

Tôi đang cố gắng thực hiện điều gì đó thực sự cơ bản trên C nhưng tôi vẫn nhận được lỗi phân đoạn. Tất cả những gì tôi muốn làm là thay thế một chữ cái của một từ bằng một chữ cái khác - trong ví dụ này thay thế chữ L. bằng L. Có thể ai giúp giải thích nơi tôi đã đi sai không? Nó phải là một vấn đề thực sự cơ bản tôi nghĩ, tôi chỉ không có ý tưởng tại sao nó không hoạt động.Thay thế phần tử ký tự riêng lẻ của một chuỗi C

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

int main(int argc, char *argv[]) 
{ 
    char *string1; 

    string1 = "hello"; 
    printf("string1 %s\n", string1);  

    printf("string1[2] %c\n", string1[2]); 
    string1[2] = 'L'; 
    printf("string1 %s\n", string1); 

    return 0; 
} 

Đối với đầu ra của tôi, tôi có được

chuỗi1 chào
string1 [2] l
Segmentation lỗi

Cảm ơn!

+0

String1 là một con trỏ tới bộ nhớ chỉ đọc (trong hầu hết các hệ thống) vì nó là bộ khởi tạo không đổi. Bạn không thể ghi vào chuỗi đó mà không sao chép nó trước. – gaige

Trả lời

14
string1 = "hello"; 
string1[2] = 'L'; 

Bạn can't change string literals, đó là hành vi không xác định. Hãy thử điều này:

char string1[] = "hello"; 

Hoặc có thể:

char *string1; 
string1 = malloc(6); /* hello + 0-terminator */ 
strcpy(string1, "hello"); 

/* Stuff. */ 

free(string1); 
+0

Ok- cảm ơn bạn! Tôi sẽ cho đi. – user1163974

+0

Không có gì lớn nhưng bạn có thể sử dụng strdup ("hello") thay vì gọi đến malloc và strcpy. strdup làm điều này cho bạn, nó thuận tiện hơn để sử dụng – Zoneur

+0

@Zoneur Yup, tôi thường khuyên bạn nên 'strdup' nhưng đôi khi có vấn đề vì nó không phải là tiêu chuẩn. – cnicutar

3
char *string1; 
string1 = "hello"; 

string1 điểm để một chuỗi literals đen và chuỗi đều là phòng không sửa đổi.

Điều bạn có thể làm là khởi tạo một mảng với các phần tử của chuỗi ký tự.

char string1[] = "hello"; 

các thành phần của mảng string1 có thể sửa đổi.

0
string1[2] = 'L'; 

bạn đang cố gắng thay đổi một chuỗi chữ đó là hành vi không xác định trong C. Thay vì sử dụng string1[]="hello"; Segmentation lỗi bạn nhận được là vì nghĩa đen có lẽ được lưu giữ trong các đọc phần duy nhất của bộ nhớ và cố gắng viết cho nó tạo ra hành vi không xác định.

1
char *string1 = "hello"; 

Khi chạy mã, chuỗi chữ sẽ nằm trong phần chỉ đọc. Hệ điều hành không cho phép mã thay đổi khối bộ nhớ đó, vì vậy bạn sẽ bị lỗi.

char string1[] = "hello"; 

Chuỗi chữ sẽ được đẩy lên chồng khi bạn chạy mã.

Các vấn đề liên quan