30/09/2018, 16:04

Cùng đặt vấn đề nào (Bản số 8)

Tiếp theo đây sẽ là một vấn đề không mới nhưng chưa bao giờ cũ, tiếp tục con trỏ nhá

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

void AssignString(char *str){
     str = "This is the 2nd string";
}
int main(){
     char *abc = "This is original string";
     AssignString(abc);
     printf(abc);
     getchar();
}
  1. Cái gì sẽ được in ra ?
  2. Nếu muốn hàm AssignString làm việc đúng thì phải làm như thế nào?
Nguyễn Minh Dũng viết 18:14 ngày 30/09/2018

Cái gì sẽ được in ra ?

This is original string

Nếu muốn hàm AssignString làm việc đúng thì phải làm như thế nào?

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

void AssignString(char **str){
     *str = "This is the 2nd string";
}
int main(){
     char *abc = "This is original string";
     AssignString(&abc);
     printf(abc);
     getchar();
}

Giải thích giống như bài này

Có vấn đề luôn, vấn đề bự, nhiều bạn sai cái này. Vì C truyền giá trị chứ không truyền biến vào hàm. Nên trong hàm void myfunction(char *q) chỉ có địa chỉ của q là truyền vào chứ không phải là q. Các thao tác bên trong hàm myfunction sẽ vô tác dụng với p ở bên hàm main. Điều này dẫn đến dù ta có cấp phát vùng nhớ cho q bên trong myfunciont đi chăng nữa thì p ở hàm main cũng không nhận được gì. Vì p ở hàm main chưa bao giờ chui vào trong myfunction. Để giải quyết vấn đề này thì ta dùng con …

Bài liên quan
0