2015-05-18 31 views
7

Tôi có mã sau đây sao chép chuỗi đối số vào mảng char.Sao chép chuỗi từ argv sang mảng char trong C

char *str = malloc(strlen(argv[1]) + 1); 
strcpy(str, argv[1]); 

printf("%s\n", str); 

Tại sao khi tôi vượt qua sau đối số:

$6$4MfvmFOaDUaa5bfr$cvtrefr 

tôi nhận được:

MfvmFOaDUaa5bfr 

Thay vì toàn bộ chuỗi. Một nơi nào đó tôi bị mất số đầu tiên. Tôi đã thử nhiều phương pháp khác nhau và mỗi phương thức hoạt động giống nhau hoặc không hoạt động.

Chìa khóa của tôi chỉ nhận được muối (trong trường hợp này) 4MfvmFOaDUaa5bfr hoặc $6$4MfvmFOaDUaa5bfr không có ký tự $ thứ ba. Tôi cố gắng để có được phương pháp để sao chép chuỗi trong khi tôi đáp ứng $ thứ ba và sau đó ngừng sao chép.

Trả lời

10

Vì trong chuỗi $6$4MfvmFOaDUaa5bfr$cvtrefr, $6, $4$cvtrefr được mở rộng bởi vỏ cho các đối số và biến vị trí và tất cả đều trống.

Vượt qua cãi nhau với dấu nháy đơn:

./a.out '$6$4MfvmFOaDUaa5bfr$cvtrefr' 

mà sẽ ngăn chặn việc mở rộng vỏ.

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