Truyền con trỏ vào hàm

Em viết chương trình tách tên từ họ tên như sau:

#include <string.h>
#include <stdio.h>
#include<iostream>
using namespace std;
char *getname(char *str){
	char *token, *temp;
   /* lay token dau tien */
   token = strtok(str, " ");
   
   /* duyet qua cac token con lai */
   while( token != NULL ) 
   {
      temp=token;
    
      token = strtok(NULL, " ");
   }
   return temp;
}
int main()
{
   char str[80] = "Nguyen Van An";
  cout << getname(str) << endl; // In ra ten
  cout<<str; //In ho ten lan nua,
}

Và kết quả như sau:
image

Do truyền trực tiếp con trỏ str vào hàm nên giá trị gốc của str cũng bị thay đổi. Có cách nào để hàm xử lí mà không làm thay đổi giá trị ban đầu k ?

Chỗ này để làm gì vậy bạn???

hàm này lấy từ từng ngăn cách bởi " ", này kiểu duyệt đến từ tiếp theo vậy

NULL trong cây lệnh đó là gì?

Edit: sorry vì không có sử dụng nên không nhớ hàm này
chỗ này bạn đang viết code để trả lại họ, chính ý đồ của bạn là vậy (cắt lấy token cho đến khi hết và trả về token cuối cùng)
nếu bạn không muốn chuỗi ban đầu bị biến đổi thì copy nội dung của chuỗi ra trước khi làm

3 Likes

Không muốn truyền trực tiếp thì… tất nhiên là sao chép nó ra 1 mảng khác thôi.

2 Likes

tự viết hàm for tìm ký tự khoảng trắng cuối cùng thôi :pensive:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?